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

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class TC2C {
	
	public static void main(String[] args) {
		FastScanner in = new FastScanner();
		
		int n = in.nextInt();
		int k = in.nextInt();
		int s = in.nextInt();
		int t = in.nextInt();
		int[] carsPrice = new int[n];
		int[] carsPetrol = new int[n];
		ArrayList<Integer> petrolStations = new ArrayList<Integer>(k);
		for (int m = 0; m < n; m++) {
			carsPrice[m] = in.nextInt();
			carsPetrol[m] = in.nextInt();
		}
		for (int m = 0; m < k; m++) {
			petrolStations.add(in.nextInt());
		}
		Collections.sort(petrolStations);
		int chosen = -1;
		for (int i = 0; i < n; i++) { //i - ����� ������� ������
			int time = 0;
			int point = 0; //������� �����
			boolean flag = false;
			for (int station : petrolStations) { //station - ����� ���� ��������
				int track = station - point;
				point = station;
				if (track * 2 > carsPetrol[i]) { //���� �� ������� ������� ��� ������ ��������
					//int relax = 1;
					//while (relax + 2*(track-relax) > carsPetrol[i]) {
					//	relax++;
					//	if (relax > track) break;
					//}
					int relax = 2*track - carsPetrol[i] - 1;
					//System.out.println("relax = " + relax + "; track = " + track);
					if (relax > track) {
						flag = true;
						break;
					}
					time += track + relax;
				} else {
					time += track;
				}
				if (time > t) {
					flag = true;
					break;
				}
			}
			if (flag) continue;
			{//�� ��������� ���� �� ����������
				int track = s - point;
				if (track * 2 > carsPetrol[i]) { //���� �� ������� ������� ��� ������ ��������
					//int relax = 1;
					//while (relax + 2*(track-relax) > carsPetrol[i]) {
					//	relax++;
					//	if (relax > track) break;
					//}
					int relax = 2*track - carsPetrol[i];
					//System.out.println("relax = " + relax + "; track = " + track);
					if (relax > track) continue;
					time += track + relax;
				} else {
					time += track;
				}
				if (time > t) continue;
			}
			if (time <= t) { //���� ������
				if (chosen == -1 || carsPrice[i] < carsPrice[chosen]) {
					chosen = i;
				}
			}
		}
		System.out.println(chosen < 0 ? "-1" : carsPrice[chosen]);
	}
	
	public static class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		public FastScanner(String s) {
			try {
				br = new BufferedReader(new FileReader(s));
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

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

		String nextToken() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

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

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

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

}
