Problem:
Score : 400 points

Problem Statement

A university student, Takahashi, has to take N examinations and pass all of them.
Currently, his readiness for the i-th examination is A_{i}, and according to his investigation, it is known that he needs readiness of at least B_{i} in order to pass the i-th examination.

Takahashi thinks that he may not be able to pass all the examinations, and he has decided to ask a magician, Aoki, to change the readiness for as few examinations as possible so that he can pass all of them, while not changing the total readiness.

For Takahashi, find the minimum possible number of indices i such that A_i and C_i are different, for a sequence C_1, C_2, ..., C_{N} that satisfies the following conditions:

The sum of the sequence A_1, A_2, ..., A_{N} and the sum of the sequence C_1, C_2, ..., C_{N} are equal.

For every i, B_i \leq C_i holds.

If such a sequence C_1, C_2, ..., C_{N} cannot be constructed, print -1.

Constraints

1 \leq N \leq 10^5

1 \leq A_i \leq 10^9

1 \leq B_i \leq 10^9

A_i and B_i are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_{N}
B_1 B_2 ... B_{N}

Output

Print the minimum possible number of indices i such that A_i and C_i are different, for a sequence C_1, C_2, ..., C_{N} that satisfies the conditions.
If such a sequence C_1, C_2, ..., C_{N} cannot be constructed, print -1.

Sample Input 1

3
2 3 5
3 4 1

Sample Output 1

3

(A_1, A_2, A_3) = (2, 3, 5) and (B_1, B_2, B_3) = (3, 4, 1). If nothing is done, he cannot pass the first and second exams.
The minimum possible number of indices i such that A_i and C_i are different, 3, is achieved when:

(C_1, C_2, C_3) = (3, 5, 2)

Sample Input 2

3
2 3 3
2 2 1

Sample Output 2

0

In this case, he has to do nothing in order to pass all the exams.

Sample Input 3

3
17 7 1
25 6 14

Sample Output 3

-1

In this case, no matter what is done, he cannot pass all the exams.

Sample Input 4

12
757232153 372327760 440075441 195848680 354974235 458054863 463477172 740174259 615762794 632963102 529866931 64991604
74164189 98239366 465611891 362739947 147060907 118867039 63189252 78303147 501410831 110823640 122948912 572905212

Sample Output 4

5

Solution in Fortran (gfortran v4.8.4) (judge verdict: Wrong Answer)

program prob6
    implicit none
    integer(8) :: n, i, ans, minsum
    integer(8), allocatable :: a(:), b(:), d(:)
    read(*,*) n
    allocate(a(n))
    allocate(b(n))
    allocate(d(n))
    read(*,*) a
    read(*,*) b

    d = a - b
    if(sum(d) < 0) then
        write(*,*) "-1"
        stop
    end if

    call msort(d)

    do i = 1, n
        if(d(i) >= 0) then
            ans = i - 1
            exit
        end if
        minsum = minsum - d(i)
    end do

    do i = n, 1, -1
        if(minsum <= 0) then
            exit
        end if
        minsum = minsum - d(i)
        ans = ans + 1
    end do

    write(*,*) ans

    deallocate(a)
    deallocate(b)
    deallocate(d)
    stop
contains


  !
  ! swap two arguments
  !
subroutine swap(a, b)
    implicit none
    integer(8), intent(inout) :: a, b

    integer(8) :: c

    c = a
    a = b
    b = c

  end subroutine swap

  !
  ! quick sortを乱択化するためのsubroutine
  ! このsubroutineは非公開にしているため、kadai6.f90内の
  ! randintとはバッティングしない
  !
  subroutine randint(x, maxint)
    implicit none
    integer(8), intent(out) :: x
    integer(8), intent(in)  :: maxint

    real(8) :: r

    call random_number(r)

    x = int(maxint * r)

  end subroutine randint

  !
  ! quick sort
  !
  recursive subroutine qsort(x)
    implicit none
    integer(8), intent(inout) :: x(:)

    integer(8) :: n, pivot, pivindex, i, j

    n = size(x)
     
    !
    ! pivotのindexを1~nの中からランダムで選ぶ
    ! はじめの配列が特殊な形でも時間計算量がO(nlog n)になる
    ! この時間計測プログラムでは不要(配列がランダムなので)
    !
    call randint(pivindex, n)
    pivindex = pivindex + 1

    ! pivotを右端に除けておく
    pivot = x(pivindex)
    call swap(x(pivindex), x(n))
    
    !
    ! i はpivot以上の値が入っているindexの最小値
    ! j はいま調べているindex
    !
    i = 1
    do j = 1, n-1
      if( x(j) < pivot ) then
        call swap(x(i), x(j))
        i = i + 1
      end if
    end do

    ! i番目にpivot、i-1番目まではpivot未満、i+1番目からはpivot以上になる
    call swap(x(i), x(n))
    
    ! i <= 2ならiまではソート完了。そうでなければi-1までをソート
    if(i >= 3) then
      call qsort(x(:i-1))
    end if

    ! i >= n-1ならi以降はソート完了。そうでなければi+1以降をソート
    if(i <= n-2) then
      call qsort(x(i+1:))
    end if

    return
  end subroutine qsort

  !
  ! merge sort
  !
  recursive subroutine msort(x)
    implicit none
    integer(8), intent(inout) :: x(:)

    integer(8) :: n, mid, i, j, k
    integer(8), allocatable :: tmp(:)
    
    n = size(x)
    
    if(n == 1) then
      return
    end if

    !
    ! 前半と後半に分けてソート
    ! 1~midとmid+1~nをそれぞれソート済みにする
    !
    mid = n / 2
    call msort(x(:mid))
    call msort(x(mid+1:))

    !
    ! tmpという配列にxを一時的に保管
    ! マージソートは外部ソート
    !
    allocate(tmp(n))
    tmp = x

    ! tmpの後半部分を左右反転
    do k = n, mid+1, -1
      tmp(k) = x(mid + n - k + 1)
    end do

    ! iは前半のリストのうちまだ見ていないものの最小値
    ! jは後半のリストのうちまだ見ていないものの最小値
    ! kは見た回数の合計
    i = 1
    j = n

    do k = 1, n
      !
      ! 一番左と一番右のうち小さい方をxに入れていく
      ! ここが等号つき不等号なので、安定ソートとなる
      !
      if(tmp(i) <= tmp(j)) then
        x(k) = tmp(i)
        i = i + 1
      else
        x(k) = tmp(j)
        j = j - 1
      end if
    end do
    
    deallocate(tmp)
    return
  end subroutine msort

end program prob6