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

/**
 * Created by moghadas on 11/20/2016.
 */
public class RoadToCinema {
    static int k;
    static int [] gascoordinate;
    static int [] distance;
    static int s;
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        HashMap<Integer,Integer> cars=new HashMap<>();
        int n=scanner.nextInt();
         k=scanner.nextInt();
        gascoordinate=new int[k];
        s=scanner.nextInt();
        int t=scanner.nextInt();
        for (int i = 0; i <n ; i++) {
            cars.put(scanner.nextInt(),scanner.nextInt());
        }
        for (int i = 0; i <k ; i++) {
            gascoordinate[i]=scanner.nextInt();
        }
        Arrays.sort(gascoordinate);
        setDistance();
        /*for (int i = 0; i <k+1 ; i++) {
            System.out.println(distance[i]);
        }*/
        Map<Integer,Integer> map=new TreeMap<>(cars);
        //System.out.println(map);
        Iterator entries = map.entrySet().iterator();
        while (entries.hasNext())
        {
            Map.Entry thisEntry = (Map.Entry) entries.next();
            //System.out.println(thisEntry.getKey());
            if (doesreacable((Integer) thisEntry.getValue(),t))
                {System.out.println(thisEntry.getKey());
                    return;
                }
        }
    }
    static void setDistance()
    {
        distance=new int[k+1];
        for (int i = 0; i <k+1 ; i++) {
            if (i==0)
                distance[i]=gascoordinate[i];
            else {if (i==k)
                distance[i]=s-gascoordinate[i-1];
                else
                distance[i]=gascoordinate[i]-gascoordinate[i-1];}
        }
    }

    static boolean doesreacable(Integer capacity,int Time)
    {
        int time=0;
        int ca=capacity;
        for (int i = 0 ; i <distance.length ; i++) {
            if (capacity<distance[i])
                return false;
            else {
                int g = ca / 2;
                if (g >= distance[i])
                    time += distance[i];
                else {
                    for (int k = g - 1; k >= 0; k--) {
                        if (capacity - (k * 2) >= distance[i] - k) {
                            {
                                time += (distance[i] - k) * 2 + k;
                                break;
                            }
                        }
                        //System.out.println(k);
                    }
                }
            }
        }
        //System.out.println(time);
        if (time<=Time)
            return true;
        else
            return false;
    }

}
