1 1 2 2
1000000000 1000000000
1
 1 1 1000000000 1000000000
100 1000000000
1
 1 1 10 18
5 6
5
 2 1 1000000000 2000000000
111 999999999
101 999999998
1
 4 13 400 600
13 30
1 19
1 160
1 113
58 73 15 319 194 362 128 157 336 162 77 90 96
 1 15 100 200
283 8
30 58 16 45 80 82 55 95 24 23 86 28 51 47 20
 3 2 300 400
24 68
13 65
15 113
127 177
 1 1 2 1
1 10
1
 4 2 7 15
10 9
4 4
9 3
4 10
1 6
 2 1 1000000000 2000000000
111 1000000000
101 1000000000
5
 2 1 1000000000 2000000000
111 999999998
101 999999998
1
 1 1 1000000000 1000000000
1 1000000000
1

1000000000
 -1
 5
 111
 1
 -1
 -1
 -1
 4
 101
 -1
 -1

//package leto;
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class rofl {
	FastScanner in;
	PrintWriter out;
	public static void main(String[] arg) {
		new rofl().run();
	}
	static int cons = 1000000;
	static int []d = new int [cons];
	static int n = 0;
	static int k = 0;
	static int s = 0;
	static int t = 0;
	public void solve() throws IOException {
	//	Scanner scan = new Scanner(System.in);
		n = in.nextInt();
		k = in.nextInt();
		s = in.nextInt();
		t = in.nextInt();
		Car []a = new Car[n];
		for(int i = 0;i<n;i++){
			a[i] = new Car(in.nextInt(), in.nextInt());
		}
		Arrays.sort(a);
		d[1] = in.nextInt();
		for(int i = 2;i<=k;i++){
			d[i] = in.nextInt()-d[i-1];
		}
		d[k+1] = s-d[k];
		int l = 0;
		int r = n-1;
		while(r-l>1){
			int m = (l+r)/2;
			if(fun(a[m].v) <=t){
				l = m;
			} else {
				r = m;
			}
		}
		System.out.println(a[r].c);
	}
	public static double fun(int m){
		double sum = 0;
		for(int i = 1;i<=k+1;i++){
			if(d[i]>m){
				return(Double.MIN_VALUE);
			}
			if(m>=2*d[i]){
				sum += d[i];
			} else {
				double ty = m-d[i];
				double to = 4*d[i];
				sum += ty+to;
			}
		}
		return(sum);
	}
	public class Car implements Comparable<Car>{
		int c;
		int v;
		
		public Car(int c, int v) {
			this.c = c;
			this.v = v;
		}

		@Override
		public int compareTo(Car x) {
			if (v - x.v > 0)
				return 1;
			if (v - x.v < 0)
				return -1;
			return 0;
		}
	}
	public void run() {
		try {
			in = new FastScanner(new BufferedReader(new InputStreamReader(System.in)));
			out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));

			solve();

			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		FastScanner(BufferedReader bufferedReader) {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreTokens()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

	}
}