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

# Question B. Road to Cinema
import sys

def roadToCinema(V, S, T, stations): # O(M)
    """
    V       : volume of fuel tank
    S       : total distance
    T       : time limit
    stations: fuel stations' locations

    rtype   : boolean, whether this aircraft can travel within the time limit
    """
    m = len(stations)
    t = 0
    stations.append(S) # destination
    prev = 0
    for cur in stations:
        dis = cur - prev
        # let Sa, Sb as the distance of accelerated mode/ normal mode respectively
        # then the task is:
        #  min t = (Sa + 2 * Sb)
        # s.t. Sa + Sb = dis
        #      2 * Sa + Sb <= V

        if dis > V:
            # Sa <= V - dis < 0
            return False
        else:
            # t = Sa + 2Sb = 3(Sa + Sb) - (2Sa + Sb)
            #   >= 3 * dis - V
            # on the other hand, Sb is non-negative
            # Sb = t - dis
            t += max(dis * 3 - V, dis)

        if t > T:
            return False

        prev = cur

    return True

def binSearch(S, T, stations): # O(logS * M)
    """
    to find the least tank volume to enable the aircraft to complete the journey
    the fastest way is to complete the whole journey with the speed of 2km/min, at 2L/km
    V <= 2S 
    """
    l = stations[0]
    r = S * 2

    for i in range(1, len(stations)):
        l = max(stations[i] - stations[i - 1], l)

    l = max(l, S - stations[-1])
    r = 2 * l
    
    if T < S:
        return float("inf")

    while l + 1 < r:
        m = l + (r - l) // 2
        if roadToCinema(m, S, T, stations) == True:
            r = m
        else:
            l = m
    
    if roadToCinema(l, S, T, stations):
        return l
    if roadToCinema(r, S, T, stations):
        return r
    return float("inf")

if __name__ == "__main__": # O(logS * M + N)
    
    line = sys.stdin.readline()
    [N, M, S, T] = list(map(int, line.split(" ")))

    aircrafts = []
    for i in range(N):
        [c, v] = list(map(int, sys.stdin.readline().split(" ")))
        aircrafts.append([c, v])

    stations = list(map(int, sys.stdin.readline().split(" ")))
    stations.sort()

    minVolume = binSearch(S, T, stations)
    
    if minVolume == float("inf"):
        # no aircraft can complete the journey
        print(-1)
    else:
        res = float("inf")
        for i in range(N):
            if aircrafts[i][1] >= minVolume:
                res = min(res, aircrafts[i][0])

        if res == float('inf'):
            # no given aircraft can complete the journey
            print(-1)
        else:
            print(res)