#include<bits/stdc++.h>
using namespace std;
#define PI 3.14159265
#define seive_len 10000001
 
typedef long long int lli;
 
vector<bool> seive(seive_len, true);
const int MOD = 1000000007;
lli primeSeive[seive_len];
 
lli gcd(lli a, lli b) {
  if(b == 0)
    return a;
  return gcd(b, a%b);
}
 
lli lcm(lli a, lli b) {
  lli gcd_ = gcd(a, b);
  lli lcm_ = (a*b)/gcd_;
  return lcm_;
}
 
lli ncr(lli n, lli r) {
  lli res = 1;
  if(r > n-r)
    r = n-r;
  
  for(lli i=0;i<r;i++) {
    res *= (n-i);
    res /= (i+1);
  }
  return res;
}
 
lli ncrMODp(lli n, lli r) {
  if(r > n-r)
    r = n-r;
  lli prow[r+1];
  memset(prow, 0, sizeof(prow));
  prow[0] = 1;
  for(lli i=1;i<=n;i++) {
    for(lli j=min(i, r);j>0;j--) {
      prow[j] = (prow[j]+prow[j-1])%MOD;
    }
  }
  return prow[r];
}
 
lli fastPower(lli a, lli b) {
  lli res=1;
  while(b > 0) {
    if(b&1)
      res *= a;
    a *= a;
    b >>= 1;
  }
  return res;
}
 
lli fastPowerMODp(lli a, lli b) {
  a %= MOD;
  lli res = 1;
  while(b) {
    if(b%2 == 1)
      res = (res*a)%MOD;
    a = (a*a)%MOD;
    b >>= 1;
  }
  return res;
}
 
void multiply(lli a[][2], lli b[][2]) {
  lli res[2][2];
  memset(res, 0, sizeof(res));
  for(lli i=0;i<2;i++) {
    for(lli j=0;j<2;j++) {
      for(lli k=0;k<2;k++) {
        res[i][j] += a[i][k]*b[k][j]%MOD;
      }
    }
  }
  for(lli i=0;i<2;i++)
    for(lli j=0;j<2;j++)
      a[i][j] = res[i][j];
}
 
void matrixExpo(lli a[][2], lli n) {
  if(n == 0 || n == 1)
    return;
  lli b[][2] = {{1,1}, {1,0}};
  matrixExpo(a, n/2);
  multiply(a, a);
  if(n%2)
    multiply(a, b);
}
 
void makeSeive() {
  for(lli i=2;i*i<=seive_len;i++) {
    if(seive[i]) {
      for(lli j=i*i;j<=seive_len;j+=i)
        seive[j] = false;
    }
  }
}
 
void makePrimeSeive() {
  for(lli i=1;i<seive_len;i++)
    primeSeive[i] = i;
  for(lli i=4;i<seive_len;i+=2)
    primeSeive[i] = 2;
  for(lli i=3;i*i<seive_len;i++) {
    if(primeSeive[i] == i) {
      for(lli j=i*i;j<seive_len;j+=i) {
        if(primeSeive[j] == j)
          primeSeive[j] = i;
      }
    }
  }
}
 
bool isPrime(lli n) {
  for(lli i=2;i<=sqrt(n);i++) {
    if(n%i == 0)
      return false;
  }
  return true;
}
 
void getInput(vector<lli>& a, lli n) {
  lli x;
  for(lli i=0;i<n;i++) {
    cin >> x;
    a.push_back(x);
  }
}

void testCase() {
    lli n;
    cin >> n;
    vector<lli> a(n), b(n);
    for(lli i=0;i<n;i++)
        cin >> a[i] >> b[i];
    lli sum = 0, suma = 0;
    for(lli i: b)
        sum += i;
    for(lli i: a)
        suma += i;
    vector<pair<lli, lli>> c;
    for(lli i=0;i<n;i++)
        c.push_back({2*a[i]+b[i], i});
    sort(c.rbegin(), c.rend());
    sum = 0;
    lli i = 0;
    while(sum <= suma) {
        sum += a[c[i].second]+b[c[i].second];
        suma -= a[c[i].second];
        i++;
    }
    cout << i;
}

int main() {
  	// ios_base::sync_with_stdio(false);
  	// cin.tie(NULL);
  	lli t=1;
  	// cin >> t;
    // makePrimeSeive();
  	makeSeive();
    // FILE* fp;
    // fp = fopen("out.txt", "w");
  	for(lli i=1;i<=t;i++) {
      // fprintf(fp, "Case #%d:\n", i);
      // cout << "Case #" << i << ":" << ' ';
  		// cout << "Scenario #" << i << ":" << endl;
  		testCase();
      cout << '\n';
  	}
  	return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<vector>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const ll maxn = 200010;
ll a[200010],b[200010],ans[200010];
struct st{
	ll a,b,c,d;
}p[200010];
bool cmp(st aa,st bb){
	return aa.d+aa.a>bb.d+bb.a;
}
int main(){
	ll n;
	cin>>n;
	ll s=0;
	ll a,b;
	for(ll i=0;i<n;i++){
		cin>>p[i].a>>p[i].b;
		p[i].c=p[i].b-p[i].a;
		p[i].d=p[i].b+p[i].a;
		s-=p[i].a;
	}
	sort(p,p+n,cmp);
	ll cnt=0,j=0;
	while(s<=0){
		s+=p[j].d+p[j].a;
		j++;
		cnt++;
	}
	cout<<cnt<<endl;
}
