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.util.Arrays;

public class Cinema {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] strings = reader.readLine().split(" ");
        int mash = Integer.parseInt(strings[0]);
        int AZS = Integer.parseInt(strings[1]);
        int cinema = Integer.parseInt(strings[2]);
        int time = Integer.parseInt(strings[3]);
        int[][] cars = new int[mash][2];
        int[] zapravki = new int[AZS+1];
        for (int i = 0;i < mash;i++)
        {
            strings = reader.readLine().split(" ");
            cars[i][0] = Integer.parseInt(strings[0]);
            cars[i][1] = Integer.parseInt(strings[1]);
        }

        strings = reader.readLine().split(" ");
        for (int i = 0;i < AZS;i++)
        {
            zapravki[i] = Integer.parseInt(strings[i]);
        }
        zapravki[AZS] = cinema;
        Arrays.sort(zapravki);
        reader.close();

        int min = Integer.MAX_VALUE;
        int minAr = Integer.MAX_VALUE;
        for (int i = 0;i < mash;i++)
        {
            int arenda = cars[i][0];
            int benz = cars[i][1];
            boolean canBe = true;

            int last = 1;
            int times = 0;
            for (int p = 0;p <= AZS;p++)
            {
                int rast = zapravki[p] - last;
                last = zapravki[p];

                int fast = benz - rast;
                if (fast < 0) {
                    canBe = false;
                    break;
                }


                times += fast ;
                if ((rast - fast) < 0)
                {
                    times = (rast - fast)*2;
                }
            }
            if (times <= min && canBe && times <= time && arenda < minAr)
            {
                minAr = arenda;
                min = times;
            }
        }

        System.out.println(minAr != Integer.MAX_VALUE?minAr:-1);
    }
}
