//dilivery.cpp
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;

struct Data{
	int p, t;
};

int main()
{
	int n;
	int ans = 0;
	Data *a = nullptr;
	
	priority_queue<int> pq;
	
	scanf("%d", &n);
	a = new Data[n];
	for (int i = 0; i < n; ++i)
	{
		scanf("%d%d", &a[i].p, &a[i].t);
	}
	sort(a, a + n, [](const Data &lhs, const Data &rhs) {
		if (lhs.t != rhs.t)
		{
			return lhs.t < rhs.t;
		}
		return lhs.p < rhs.p;
	});
	
	for (int i = 0, cur = 0; i < n; ++i)
	{
		pq.push(a[i].p);
		cur += a[i].p;
		if (cur > a[i].t)
		{
			cur -= pq.top(); pq.pop();
		}
	}
	
	ans = (int)pq.size();
	
	printf("%d\n", ans);
	
	delete []a;
	return 0;
}

