#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std;
#define lson 2*i
#define rson 2*i+1
#define Pair pair<int, int>
#define ULL unsigned long long
#define LS l,mid,lson
#define RS mid+1,r,rson
#define up(i,x,y) for(int i=x;i<y;i++)
#define down(i,x,y) for(int i=x;i>=y;i--)
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a)
#define gcd(a,b) __gcd(a,b)
#define LL long long
#define N 1000005
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define EXP 1e-8
#define lowbit(x) (x&-x)
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
const int m=1e6;
Pair itv[m+5];
int a[m+5],b[m+5],c[m+5];
int n,l,p;
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&c[i],&b[i]);
a[i]=l-c[i];//c[i]代表距离终点的距离,把从c[i]转成a[i],代表距离起点的距离
}
scanf("%d%d",&l,&p);
a[n]=l;b[n]=0;
for(int i=0;i<=n;i++){
a[i]=l-c[i];
itv[i].first=a[i];
itv[i].second=b[i];
}
sort(itv,itv+n+1);//进行排序,看看先经过哪个加油站
priority_queue<int>que;//优先队列,当油用完,选取最大的油量进行加油
int ans=0,pos=0,tank=p;//ans加油次数,pos当前位置,tank当前油量
for(int i=0;i<=n;i++){
int d=itv[i].first-pos;
while(tank-d<0){
if(que.empty()){
puts("-1");
return 0;
}
tank+=que.top();
que.pop();
ans++;
}
tank-=d;
pos=itv[i].first;
que.push(itv[i].second);
}
printf("%d\n",ans);
}