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.util.*;
import java.io.*;
import java.math.BigInteger;

public class Main extends Reader {
    
	public static void main(String[] args) throws IOException {
	    int n = ni(), k = ni();
	    long s = nl(), t = nl();
	    long z = 1000000010;
	    long c[] = new long[n];
	    for (int i=0; i<n; i++) {
	        c[i] = nl();
	        c[i] += nl() * z;
	    }
	    Arrays.sort(c);
	    int size = 1;
	    for (int i=1; i<n; i++) {
	        long tmp = c[i] % z;
	        while (size > 0 && tmp <= c[size-1]%z) size--;
	        c[size++] = c[i];
	    }
	    
	    long g[] = new long[k+1];
	    for (int i=0; i<k; i++) g[i] = ni();
	    g[k] = s;
	    Arrays.sort(g);
	    
	    int l = 0, r = size-1;
	    while (l<=r) {
	        int m = (l+r)>>1;
	        long v = c[m]/z;
	        long p = 0, time = t;
	        boolean flag = true;
	        for (int i=0; i<=k; i++) {
	            long dis = g[i]-p;
	            if (v >= dis * 2) {
	                time -= dis;
	            } else if (v >= dis) {
	                time -= 3 * dis - v;
	            } else {
	                time = -1;
	            }
	            if (time < 0) {
	                flag = false; break;
	            }
	            p = g[i];
	        }
	        if (!flag) l = m+1; else r = m-1;
	    }
	    if (l >= size) {
	        System.out.println(-1);
	    } else {
	        System.out.println(c[l] % z);
	    }
	}
}



class Reader {
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");

    /** call this method to change InputStream */
    static void init(InputStream input) {
        reader = new BufferedReader(new InputStreamReader(input) );
    }

    /** get next word */
    static String ns() throws IOException {
        while ( ! tokenizer.hasMoreTokens() ) {
            tokenizer = new StringTokenizer(
                   reader.readLine() );
        }
        return tokenizer.nextToken();
    }

    static int ni() throws IOException {
        return Integer.parseInt( ns() );
    }
	
    static double nd() throws IOException {
        return Double.parseDouble( ns() );
    }
    static long nl() throws IOException {
        return Long.valueOf( ns() );
    }
}