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.StringTokenizer;

/**
 * Created by Everest on 20.11.2016.
 */
public class T_C_B {

    static long time_2(long bak, long s){
        long fast = s;
        long q = 0;
        long time = 0;
        if(bak < s){
            time = -1;
        }else {
            OUT:
            for (long i = s; i >= 0; i--) {
                if (fast * 2 + q < bak) {
                    time = fast + q * 2;
                    break OUT;
                } else {
                    fast--;
                    q++;
                }
            }
        }
        return time;
    }

    static boolean isIt(long bak, long fuels[], long s, long t){

        long time = 0;
        long fuel = bak;
        long way = 0;
        long tmp = 0;
        boolean status = true;

   OUT2:     for (int i = 0; i < fuels.length; i++) {
            if(fuel-2*fuels[i] >= 0){
                time += fuels[i];
                way = fuels[i];
            }else if ((tmp = time_2(bak, s)) != -1){
                time += tmp;
            }else {
                status = false;
                break OUT2;
            }
        }

        return status;
    }

    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer str = new StringTokenizer(br.readLine());

        long n = Long.parseLong(str.nextToken());
        long k = Long.parseLong(str.nextToken());
        long s = Long.parseLong(str.nextToken());
        long t = Long.parseLong(str.nextToken());

        long min = 100000000000l;
        long cars[][] = new long[(int)n][2];
        for (int i = 0; i < n; i++) {
            str = new StringTokenizer(br.readLine());
            cars[i][0] = Long.parseLong(str.nextToken());
            cars[i][1] = Long.parseLong(str.nextToken());
        }
        long fuels[] = new long[(int)k];
        for (int i = 0; i < k; i++){
            str = new StringTokenizer(br.readLine());
            fuels[i] = Long.parseLong(str.nextToken());
        }

        for (int i = 0; i < n; i++) {
            if(isIt(cars[i][1], fuels, s, t)){
                min = Math.min(cars[i][0], min);
            }
        }

        System.out.println(min);

    }
}
