# にぶたんが失敗したので両端からしゃくとりするような感じでやってみる

# 差分でソートして大きく足りないものは大きく余ってるやつをぶつける



N = int(eval(input()))

A = list(map(int, input().split()))

B = list(map(int, input().split()))

if sum(A) < sum(B):

    print((-1))

    exit()

D = []

pre_ans = 0  # 確実に変えなくてはいけないやつ

for i in range(N):

    if A[i] != B[i]:

        D.append(A[i] - B[i])

        if A[i] < B[i]:

            pre_ans += 1

D = sorted(D)



used = 0

tmp = 0

# print(D)

l, r = 0, len(D)

while r - l > 1:

    # print("now tmp: {}".format(tmp))

    if tmp + D[l] < 0:

        # 新たに借りる

        r -= 1

        used += 1

        tmp += D[r]

    tmp += D[l]

    l += 1

print((used + pre_ans))

# 余剰と不足に分ける 余剰の多いやつから使って不足の多いやつに振る



n = int(eval(input()))

a = list(map(int, input().split()))

b = list(map(int, input().split()))

if sum(a) < sum(b):

    print((-1))

    exit()



surplus = []

lack = []

for i in range(n):

    if a[i] > b[i]:

        surplus.append(a[i] - b[i])

    elif a[i] < b[i]:

        # 同値は含まない

        lack.append(b[i] - a[i])

if len(lack) == 0:

    print((0))

    exit()



surplus = sorted(surplus, reverse=True)

lack = sorted(lack, reverse=True)



# print(surplus, lack)



right = 0

ans = 1

for left in range(len(surplus)):

    while right < len(lack) and surplus[left] - lack[right] >= 0:

        surplus[left] -= lack[right]

        ans += 1

        right += 1

    if right == len(lack):

        break

    # ここまではギリギリ条件を満たしている

    if right < len(lack):

        # 次にleftを使わなきゃいけない

        ans += 1

        # あまったぶんを回す

        lack[right] -= surplus[left]

print((ans), end=' ')
# にぶたんが失敗したので両端からしゃくとりするような感じでやってみる
# 差分でソートして大きく足りないものは大きく余ってるやつをぶつける
N = int(eval(input()))
A = list(map(int, input().split()))
B = list(map(int, input().split()))
if sum(A) < sum(B):
    print((-1))
    exit()
D = []
pre_ans = 0  # 確実に変えなくてはいけないやつ
for i in range(N):
    if A[i] != B[i]:
        D.append(A[i] - B[i])
        if A[i] < B[i]:
            pre_ans += 1
D = sorted(D)
used = 0
tmp = 0
# print(D)
l, r = 0, len(D)
while r - l > 1:
    # print("now tmp: {}".format(tmp))
    if tmp + D[l] < 0:
        # 新たに借りる
        r -= 1
        used += 1
        tmp += D[r]
    tmp += D[l]
    l += 1
print((used + pre_ans))

# 余剰と不足に分ける 余剰の多いやつから使って不足の多いやつに振る
n = int(eval(input()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))
if sum(a) < sum(b):
    print((-1))
    exit()
surplus = []
lack = []
for i in range(n):
    if a[i] > b[i]:
        surplus.append(a[i] - b[i])
    elif a[i] < b[i]:
        # 同値は含まない
        lack.append(b[i] - a[i])
if len(lack) == 0:
    print((0))
    exit()
surplus = sorted(surplus, reverse=True)
lack = sorted(lack, reverse=True)
# print(surplus, lack)
right = 0
ans = 1
for left in range(len(surplus)):
    while right < len(lack) and surplus[left] - lack[right] >= 0:
        surplus[left] -= lack[right]
        ans += 1
        right += 1
    if right == len(lack):
        break
    # ここまではギリギリ条件を満たしている
    if right < len(lack):
        # 次にleftを使わなきゃいけない
        ans += 1
        # あまったぶんを回す
        lack[right] -= surplus[left]
print((ans), end=" ")

-# にぶたんが失敗したので両端からしゃくとりするような感じでやってみる -# 差分でソートして大きく足りないものは大きく余ってるやつをぶつける -N = int(eval(input())) -A = list(map(int, input().split())) -B = list(map(int, input().split())) -if sum(A) < sum(B): +# 余剰と不足に分ける 余剰の多いやつから使って不足の多いやつに振る +n = int(eval(input())) +a = list(map(int, input().split())) +b = list(map(int, input().split())) +if sum(a) < sum(b): -D = [] -pre_ans = 0  # 確実に変えなくてはいけないやつ -for i in range(N): -    if A[i] != B[i]: -        D.append(A[i] - B[i]) -        if A[i] < B[i]: -            pre_ans += 1 -D = sorted(D) -used = 0 -tmp = 0 -# print(D) -l, r = 0, len(D) -while r - l > 1: -    # print("now tmp: {}".format(tmp)) -    if tmp + D[l] < 0: -        # 新たに借りる -        r -= 1 -        used += 1 -        tmp += D[r] -    tmp += D[l] -    l += 1 -print((used + pre_ans)) +surplus = [] +lack = [] +for i in range(n): +    if a[i] > b[i]: +        surplus.append(a[i] - b[i]) +    elif a[i] < b[i]: +        # 同値は含まない +        lack.append(b[i] - a[i]) +if len(lack) == 0: +    print((0)) +    exit() +surplus = sorted(surplus, reverse=True) +lack = sorted(lack, reverse=True) +# print(surplus, lack) +right = 0 +ans = 1 +for left in range(len(surplus)): +    while right < len(lack) and surplus[left] - lack[right] >= 0: +        surplus[left] -= lack[right] +        ans += 1 +        right += 1 +    if right == len(lack): +        break +    # ここまではギリギリ条件を満たしている +    if right < len(lack): +        # 次にleftを使わなきゃいけない +        ans += 1 +        # あまったぶんを回す +        lack[right] -= surplus[left] +print((ans), end=" ")