//#pragma GCC target("avx2")
//#pragma GCC optimize("O3")
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <tuple>
#include <math.h>
#include <set>
#include <stack>
#include <bitset>
#include <map>
#include <cassert>
#include <queue>
#include <random>
#include <unordered_set>
#include <unordered_map>
#define pqueue priority_queue
#define pb(x) push_back(x)
#define endl '\n'
#define all(x) x.begin(), x.end()
#define int long  long

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
// typedef tuple<ll, ll, ll> tiii;
typedef pair<int, int> pii;
typedef vector<pair<int, int> > vpii;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef vector<char> vc;

const int inf = 1e9 + 228;
const ll mod = 1e9 + 7;
const ll mod2 = 998244353;
const ld eps = 1e-5;


void fast_io(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
//    freopen("grass.in", "r", stdin);
//    freopen("grass.out", "w", stdout);
}

bool cmp(pii a, pii b){
    return a.first + a.second * 2 >= b.first + b.second * 2;
}

void solve(){
    int n;
    cin >> n;
    vpii kek(n);
    for(pii &i:kek)
        cin >> i.second >> i.first;
    int ans1 = 0;
    for(pii i:kek)
        ans1 += i.second;
    vi lol;
    for(pii i:kek)
        lol.pb(i.first + i.second * 2);
    sort(all(lol));
    reverse(all(lol));
    for(int i=0; i<n; i++){
        ans1 -= lol[i];
        if(ans1 < 0){
            cout << i + 1 << endl;
            return;
        }
    }
    cout << n << endl;
} 

signed main(){
  fast_io();
//  srand(time(NULL));
//  cout << fixed << setprecision(3);
  int q = 1;
//  cin >> q;
  while(q--)
    solve();
}


#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
 
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;
 
typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;
 
typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;
 
#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
#define trav(a,x) for (auto& a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)
 
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template<class T> bool ckmin(T& a, const T& b) { return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 100001; //check the limits, dummy
 
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);    
	
    int N; cin >> N;
    ll A[N], B[N]; F0R(i, N) cin >> A[i] >> B[i];
    vl ops; ll sum = 0;
    F0R(i, N) {
        sum += A[i]; ops.pb(2*A[i] + B[i]);
    }
    sort(all(ops)); reverse(all(ops));
    int ans = 0;
    F0R(i, N) {
        ans++; sum -= ops[i];
        if (sum < 0) break;
    }
    cout << ans << nl;
	
	return 0;
}
 
// read the question correctly (ll vs int)
// template by bqi343

