//要想rank靠前 每次做的操作只能:花费气球挤掉比自己高的 贪心:用越少气球挤掉一个排名高的人(剩的气球越多排名就越高.) 每一次操作更新答案即可
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdio>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
priority_queue<ll,vector<ll>,greater<ll> >big;//比当前rank高的需要用多少ball吹飞
priority_queue<P> small;
int main()
{
int n;
cin>>n;
ll t,w;
cin>>t>>w;
n--;
while(n--)
{
ll x,y;
scanf("%I64d%I64d",&x,&y);
if(x>t)
{
big.push(y-x+1);//
}
else
{
small.push(pair<ll,ll>(x,y));
}
}
ll rank=big.size()+1;//当前排名
//要想rank靠前 只能花费气球挤掉比自己高的 贪心:用越少气球挤掉一个排名高的人(剩的气球越多排名就越高)
while(!big.empty())
{
ll x=big.top();
if(x>t)
break;
t-=x;
big.pop();
while(!small.empty())
{
P p=small.top();
if(p.first<=t)
break;
big.push(p.second-p.first+1);//挤走一个人后 气球可能比原来rank低的人少
small.pop();
}
ll t=big.size()+1;
rank=min(rank,t);//每次做最优操作后更新答案
}
cout<<rank<<endl;
return 0;
}