#include <cmath>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>

#define rep(i, l, r) for(int i = l; i <= r; i++)
#define down(i, l, r) for(int i = l; i >= r; i--)
#define MS 234567
#define MAX 1037471823
#define Q 103

using namespace std;

int n, now, ans;
struct node
{
	int x, y;
	bool operator < (const node &k) const { return y < k.y || (y == k.y && x < k.x); }
} m[MS];

int main()
{
	priority_queue <int> q;
	scanf("%d", &n);
	rep(i, 1, n) scanf("%d%d", &m[i].x, &m[i].y);
	sort(m+1, m+1+n); now = 0;
	rep(i, 1, n) if (now + m[i].x <= m[i].y)
	{
		q.push(m[i].x); now += m[i].x; ans++;
	}
	else if (!q.empty() && q.top() > m[i].x)
	{
		now = now - q.top() + m[i].x;
		q.pop(); q.push(m[i].x); 
	}
	printf("%d\n", ans);
	return 0;
}
