Problem:
Score : 200 points

Problem Statement

There are N gems. The value of the i-th gem is V_i.

You will choose some of these gems, possibly all or none, and get them.

However, you need to pay a cost of C_i to get the i-th gem.

Let X be the sum of the values of the gems obtained, and Y be the sum of the costs paid.

Find the maximum possible value of X-Y.

Constraints

All values in input are integers.

1 \leq N \leq 20

1 \leq C_i, V_i \leq 50

Input

Input is given from Standard Input in the following format:

N
V_1 V_2 ... V_N
C_1 C_2 ... C_N

Output

Print the maximum possible value of X-Y.

Sample Input 1

3
10 2 5
6 3 4

Sample Output 1

5

If we choose the first and third gems, X = 10 + 5 = 15 and Y = 6 + 4 = 10.
We have X-Y = 5 here, which is the maximum possible value.

Sample Input 2

4
13 21 6 19
11 30 6 15

Sample Output 2

6

Sample Input 3

1
1
50

Sample Output 3

0

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace debug
{
    class main
    {
        static void Main(string[] args)
        {
            //問題クラスを展開
            ProgramB a = new ProgramB();
            a.main();//実行する

        }

    }

    class ProgramA
    {
        public void main()
        {
            //入力
            string[] s = Console.ReadLine().Split(' ');
            int a = int.Parse(s[0]);
            int b = int.Parse(s[1]);
            int t = int.Parse(s[2]);


            //b*(t/a)が答え
            Console.WriteLine(b * (t/a));

        }
    }

    class ProgramB
    {
        public void main()
        {

            //入力
            int n = int.Parse(Console.ReadLine());
            string[] v = Console.ReadLine().Split(' ');
            string[] c = Console.ReadLine().Split(' ');
            int sum = 0;


            //v-cをしてマイナスでなければ足す
            for (int i = 0; i < n; i++)
            {
                if (int.Parse(v[i]) - int.Parse(c[i]) > 0)
                    sum += int.Parse(v[i]) - int.Parse(c[i]);
            }

            //答え出力
            Console.WriteLine(sum);
            

        }
    }

    class ProgramC
    {
        static void main()
        {

            //入力
            string[] input = Console.ReadLine().Split(' ');
            int n = int.Parse(input[0]);
            int m = int.Parse(input[1]);
            int[] right = new int[n];
            int[] wrong = new int[n];


            //それぞれを判定する
            for (int i = 0; i < m; i++)
            {
                string[] temp = Console.ReadLine().Split(' ');
                int p = int.Parse(temp[0]);
                string s = temp[1];


                //すでにACしているなら無視する
                if (right[p - 1] == 1)
                    continue;

                if (s == "WA")
                {
                    wrong[p - 1]++;//間違い数をカウント
                }
                else
                {
                    right[p - 1] = 1;//ACしたら1にする。
                }
            }

            int ans1 = 0;
            int ans2 = 0;
            for (int i = 0; i < n; i++)
            {
                //正しい答えの数を足す
                ans1 += right[i];
                //もしその問題が答えならWAの数を計上する
                if (right[i] == 1)
                    ans2 += wrong[i];

            }

            //答えを出力
            Console.WriteLine(ans1 + " " + ans2);

        }
    }

    class ProgramD
    {
        static void main()
        {

            //入力
            string[] input = Console.ReadLine().Split(' ');
            int H = int.Parse(input[0]);
            int W = int.Parse(input[1]);
            int INF = 1000000;


            //ワーシャルフロイド法の準備。すべてとりあえず#とする。（そうするとこのあと.だけの判定で済む）
            int[,] dis = new int[H * W + 1, H * W + 1];
            for (int i = 0; i < H * W; i++)
                for (int j = 0; j < H * W; j++)
                {
                    if (i == j)
                        dis[i, j] = 0;
                    else
                        dis[i, j] = INF;
                }


            //前の迷路状態を記録して置くためにmaze2を作成。
            string maze2 = "####################";

            for (int i = 0; i < H; i++)
            {
                //迷路を読み込む
                string maze = Console.ReadLine();

                for (int j = 0; j < W; j++)
                {
                    //横のつながりを判定する。つながっていれば1を代入
                    if (j > 0 && maze[j - 1] == '.' && maze[j] == '.')
                    {
                        dis[i * W + j, i * W + j - 1] = 1;
                        dis[i * W + j - 1, i * W + j] = 1;
                    }

                    //縦のつながりを判定する。ひとつ上と判定します。
                    if (i > 0 && maze2[j] == '.' && maze[j] == '.')
                    {
                        dis[i * W + j, (i - 1) * W + j] = 1;
                        dis[(i - 1) * W + j, i * W + j] = 1;
                    }


                }

                //メイズを記録する
                maze2 = maze;

            }


            //ワーシャルフロイド法を用いる
            for (int k = 0; k < H * W; k++)       // 経由する頂点
                for (int i = 0; i < H * W; i++)     // 始点
                    for (int j = 0; j < H * W; j++)   // 終点
                        dis[i, j] = Math.Min(dis[i, j], dis[i, k] + dis[k, j]);

            int ans = 0;


            //最大の経路を算出する
            for (int i = 0; i < H * W; i++)
                for (int j = 0; j < H * W; j++)
                {
                    if (dis[i, j] <= INF)
                    {
                        int temp = dis[i, j];
                        if (ans < temp)
                            ans = temp;

                    }
                }

            //答を出す
            Console.WriteLine(ans);

        }

    }

    

}