using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleAppKEYENCEExamansWizard
{
    class Program
    {
        static void Main(string[] args)
        {
            // 整数の入力
            //int n = int.Parse(Console.ReadLine());
            // スペース区切りの整数の入力
            //string[] input = Console.ReadLine().Split(' ');
            //int b = int.Parse(input[0]);
            //int c = int.Parse(input[1]);
            // 文字列の入力
            //string s = Console.ReadLine();
            
                        int N = int.Parse(Console.ReadLine());// N　試験の数

            // string[] inputA = Console.ReadLine().Split(' ');// A行のデータ　準備度
            // string[] inputB = Console.ReadLine().Split(' ');// B行のデータ　合格点
            var inputA = Console.ReadLine().Split().Select(long.Parse).ToArray();
            var inputB = Console.ReadLine().Split().Select(long.Parse).ToArray();
            // 入力終わり

            //
            long inputA_Sum=0;
            foreach(long element in inputA)
            {
                inputA_Sum += element;// 準備度の合計
            }
            long inputB_Sum = 0;
            foreach (long element in inputB)
            {
                inputB_Sum += element;// 合格点の合計
            }
            if (inputB_Sum > inputA_Sum)// 準備度の合計が合格点の合計に足りなければ、そもそも全ての試験には合格できない
            {
                Console.WriteLine("-1");
                Environment.Exit(0);
            }
            //
            int testChecker = 0;
            for(int i = 0; i < N; i++) 
            {
                if(inputA[i]>= inputB[i])
                {
                    testChecker++;
                }
            }                       // A<Bがない
            if (testChecker == N)   // 全ての試験で 準備度>=合格点なら、そのまま全ての試験に合格できる
            {
                Console.WriteLine("0");
                Environment.Exit(0);
            }
            //
            // 上述以外の場合は計算してみる
            //
            int counter = 0;
            long S = 0;
            long[] afford = new long[N];
            for (int j = 0; j < N; j++)
            {
                if (inputB[j] > inputA[j])// A<B このままでは合格できない試験の数
                {
                    counter++;
                    S+= inputB[j]-inputA[j];// 足りない点数の合計
                }
                else 
                {
                    afford[j] = inputA[j] - inputB[j];// 準備度の余裕
                }
            }
            //
            int num = 0;
            long afford_Sum = 0;
            Array.Sort(afford);// 一旦、準備度の昇順に並べ替える
            Array.Reverse(afford);// リバースして降順にする
            for(int k = 0; k < N; k++)
            {
                afford_Sum += afford[k];
                num++; // 使ったA>Bの列の数
                if (afford_Sum >= S)
                {
                    break;
                }
            }
            //
            // 出力
            //
               // Console.WriteLine("A<B このままでは合格できない試験の数counter:"+counter);
               // Console.WriteLine("足りない点数の合計S:"+S);
               // Console.WriteLine("使ったA>Bの列の数num:"+num);
           Console.WriteLine(counter + num);
        }//Main終わり
    }//classProgram終わり
}//namespace終わり


Measured memory_bytes: 32224