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.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;


public class Tex_Cup_2 {
    FastScanner in;
    PrintWriter out;

    public static void main(String[] arg) {
        new Tex_Cup_2().run();
    }
    static int n;
    static int k;
    static int s;
    static int t;
    static int[][] car;
    static int[] way;
    public void solve() throws IOException {
        n = in.nextInt();
        k = in.nextInt();
        s = in.nextInt();
        t = in.nextInt();
        car = new int[n][2];
        way = new int[k+2];
        for (int i = 0; i < n; i++){
            car[i][0] = in.nextInt();
            car[i][1] = in.nextInt();
        }
        Comparator comp = new Comparator<int[]>(){

            @Override
            public int compare(int[] x1, int[] x2) {
                if (x1[0] - x2[0] < 0)
                    return -1;
                if (x1[0] - x2[0] > 0)
                    return 1;
                if (x1[1] - x2[1] < 0)
                    return 1;
                if (x1[1] - x2[1] > 0)
                    return -1;
                return 0;
            }

        };

        Arrays.sort(car, comp);

        way[0]=0;
        way[k+1]=s;
        for (int i = 1; i <= k; i++){
            way[i] = in.nextInt();
        }
        int ans = binSer();
        if (magic(ans)!=-1) {
            System.out.print(car[ans][0]);
        }else{
            System.out.println(-1);
        }
    }

    public static int binSer() {
        int l = 0;
        int r = n-1;
        while ((r-l)>1){
            int m = (r+l)/2;
            if (magic(m)==-1){
                l = m;
            }else{
                r = m;
            }
        }
        return r;
    }
    public static int magic(int x){
        int time = 0;
        for (int i = 1; i < k+2; i++){
            if (car[x][1]<(way[i]-way[i-1])){
                return -1;
            }else{
                if (car[x][1]>=2*(way[i]-way[i-1])){
                    time += way[i]-way[i-1];
                }else{
                    int y = binS((way[i]-way[i-1]), car[x][1]);
                    time += 2*y + way[i]-way[i-1]-y;
                }
            }
        }
        if (time <= t){
            return 1;
        }else{
            return -1;
        }
    }

    public static int binS(int s, int lit) {
        int l = 0;
        int r = s;
        while ((r-l) > 1){
            int m = (r+l)/2;
            if ((s-m)*2>=(lit-m)){
                l = m;
            }else{
                r = m;
            }
        }
        return l;
    }


    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());
        }



    }
}

