import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Vector;
public class Poj2431 {
public static void main(String[] args) throws IOException{
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
in.nextToken();
int n = (int)in.nval;
int[] dis = new int[n];
int[] tem = new int[n];
int[] amount = new int[n];
int[] visit = new int[n];
for(int i = 0; i<n; i++){
in.nextToken();
tem[i] = (int)in.nval;
in.nextToken();
amount[i] = (int)in.nval;
}
in.nextToken();
int l = (int)in.nval;
in.nextToken();
int p = (int)in.nval;
for(int i = 0; i<n; i++){
dis[i] = l-tem[i];
}
if(p>=l) out.println(0);
else {
Comparator<Integer> cmp;
cmp = new Comparator<Integer>(){
public int compare(Integer e1, Integer e2){
return e2-e1;
}
};
PriorityQueue<Integer> use = new PriorityQueue<Integer>(10010, cmp);
int cnt = 0;
boolean flag = false;
while(p<l){
for(int i = 0; i<n; i++){
if(dis[i] <= p && visit[i] == 0){
visit[i] = 1;
use.add(amount[i]);
}
}
if(use.isEmpty()){
flag = true;
break;
}
p += use.poll();
cnt++;
}
if(flag) out.println(-1);
else out.println(cnt);
}
out.flush();
}
}
水题,涉及到优先队列的实现,不多说直接附上java代码(亲测不用scanner也只能快700ms左右TAT)