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.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Road_To_Cinema_CD729C {
	static carro lista[];
	static int s;
	static int t;
	static int paradas[];
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out = new PrintWriter(System.out);
		String linea = in.readLine();
		while(linea!=null&&!linea.trim().equals("")){
			StringTokenizer toks = new StringTokenizer (linea);
			int n = Integer.parseInt(toks.nextToken());
			int k =Integer.parseInt(toks.nextToken());
			 s = Integer.parseInt(toks.nextToken());
			 t =Integer.parseInt(toks.nextToken());
			lista = new carro[n];
			paradas = new int [k+1];
			for (int i = 0; i < n; i++) {
				toks= new StringTokenizer(in.readLine());
				lista[i]= new carro(Integer.parseInt(toks.nextToken()),Integer.parseInt(toks.nextToken()));
			}
			toks=new StringTokenizer(in.readLine());
			for (int i = 0; i < k; i++) {
				paradas[i]=Integer.parseInt(toks.nextToken());
			}
			paradas[k]=s;
			Arrays.sort(paradas);
			Arrays.sort(lista);
			int res =solve();
			
			if(res==Integer.MAX_VALUE)
				System.out.println(-1);
			else{
				for (int i = 0; i < lista.length; i++) {
					if(lista[i].tanque>=res){
						System.out.println(lista[i].precio);
						i=lista.length;
					}
				}
			}
			
			
			linea =in.readLine();
		}
		out.close();
	}
	static int solve (){
		int a =0;
		int b=s*2;
		int mejor=Integer.MAX_VALUE;
		int m=0;
		while(a<b){
			m=(a+b)/2;
			if(puede(m)){
				mejor=Math.min(m, mejor);
				b=m-1;
			}else{
				a=m+1;
			}
		}
		return mejor;
	}
	static boolean puede(int m){
		int tiempo =0;
		int pos=0;
		int dis=0;
		for (int i = 0; i < paradas.length; i++) {
			dis=paradas[i]-pos;
			if(m/2>=dis){
				tiempo+=dis;
			}else if((m/2)+m%2>=dis){
				tiempo+=(m/2)+(m%2)*2;
				
			}else if(dis==m){
				tiempo+=m*2;
			}else if(m>dis){
				int temp=m-dis;
				tiempo+=temp+(dis-temp)*2;
			}
			else return false;
			
			pos=paradas[i];
		}
		if(tiempo<=t)
		return true;
		else return false;
		
	}
}


class carro implements Comparable<carro>{
	int precio;
	int tanque;
	@Override
	public int compareTo(carro o) {
		return Integer.compare(this.precio, o.precio);	
	}
	carro(int precio,int tanque){
		this.precio=precio;
		this.tanque=tanque;
	}
	
	
}
