#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int a[10005];
int b[10005];
struct stop{
int a;
int b;
}s[10005];
bool comp(stop s1, stop s2)
{
return s1.a < s2.a;
}
int main()
{
int l,p,n;
scanf("%d",&n);
int i;
for (i=0;i<n;i++)
scanf("%d%d",&s[i].a,&s[i].b);
scanf("%d%d",&l,&p);
for (i=0;i<n;i++)
s[i].a=l-s[i].a;
s[n].a=l;
s[n].b=0;
n++;
sort(s,s+n,comp);
//维护加油站的优先队列
priority_queue<int> que;
//ans:加油次数 pos:现在的位置 tank:油箱中的汽油量
int ans=0;
int pos=0;
int tank=p;
for (i=0;i<n;i++)
{
int d=s[i].a-pos;
while (tank-d<0)
{
if (que.empty())
{
printf("-1\n");
return 0;
}
tank+=que.top();
que.pop();
ans++;
}
tank-=d;
pos=s[i].a;
que.push(s[i].b);
}
printf("%d\n",ans);
}
#include<algorithm>
#include<queue>
using namespace std;
int a[10005];
int b[10005];
struct stop{
int a;
int b;
}s[10005];
bool comp(stop s1, stop s2)
{
return s1.a < s2.a;
}
int main()
{
int l,p,n;
scanf("%d",&n);
int i;
for (i=0;i<n;i++)
scanf("%d%d",&s[i].a,&s[i].b);
scanf("%d%d",&l,&p);
for (i=0;i<n;i++)
s[i].a=l-s[i].a;
s[n].a=l;
s[n].b=0;
n++;
sort(s,s+n,comp);
//维护加油站的优先队列
priority_queue<int> que;
//ans:加油次数 pos:现在的位置 tank:油箱中的汽油量
int ans=0;
int pos=0;
int tank=p;
for (i=0;i<n;i++)
{
int d=s[i].a-pos;
while (tank-d<0)
{
if (que.empty())
{
printf("-1\n");
return 0;
}
tank+=que.top();
que.pop();
ans++;
}
tank-=d;
pos=s[i].a;
que.push(s[i].b);
}
printf("%d\n",ans);
}