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

def roadToCinema(V, S, T, stations):
    """
    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(aircrafts, S, T, stations):
    aircrafts.sort(key = lambda x: x[1]) # sort by tank volume
    stations.sort()
    n = len(aircrafts)

    if roadToCinema(aircrafts[n - 1][1], S, T, stations) == False:
        # even the fastest aircraft cannot complete the journey
        return -1

    if roadToCinema(aircrafts[0][1], S, T, stations) == True:
        # the slowest aircraft can complete the journey
        return aircrafts[0][0]
    
    # l is False while r is True
    l = 0
    r = n - 1

    while l + 1 < r:
        m = l + (r - l) // 2
        if roadToCinema(aircrafts[m][1], S, T, stations) == True:
            r = m
        else:
            l = m
    
    return aircrafts[r][0]

if __name__ == "__main__":
    
    line = input()
    [N, M, S, T] = list(map(int, line.split(" ")))

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

    stations = list(map(int, input().split(" ")))

    res = binSearch(aircrafts, S, T, stations)

    print(res)
		 		 	 	  		   			 	     		 		