#include<cstdio>
#include<queue>
#include<algorithm>
#define re register
#define in inline
using namespace std;
in int read()
{
int s(0),b(0);char ch;
do{ch=getchar();if(ch=='-')b=1;}while(ch<'0'||ch>'9');
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
if(b)return -s;return s;
}
int n,l,p,ans;
struct node1{int pos,v;bool operator<(const node1&t)const{return pos<t.pos;}}a[10005];
struct node2{int pos,v;bool operator<(const node2&t)const{return v<t.v;}};
priority_queue<node2> q;
signed main()
{
n=read();
for(re int i=1;i<=n;++i) a[i].pos=read(),a[i].v=read();
l=read(),p=read();
for(re int i=1;i<=n;++i) a[i].pos=l-a[i].pos;
sort(a+1,a+n+1);
a[++n].pos=l,a[n].v=0;//把终点也当做一个加油站方便统一处理
int la=0;//上一次加油之后走到的位置
for(re int i=1;i<=n;++i)
{
if(a[i].pos-la<=p) q.push(node2{a[i].pos,a[i].v});
else{
if(q.empty()){ans=-1;break;}
p=p+q.top().v-(a[i].pos-la),la=a[i].pos;
q.pop();
--i,++ans;
}
}
printf("%d\n",ans);
return 0;
}
最新评论