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

/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Codechef
{
	public static void main (String[] args) throws java.lang.Exception
	{
		MyScanner sc = new MyScanner();
		int n = sc.nextInt();
		int k = sc.nextInt();
		int s = sc.nextInt();
		int t = sc.nextInt();
		
		int[] c = new int[n];
		int[] v = new int[n];
		for (int i = 0; i < n; ++i){
		    c[i] = sc.nextInt();
		    v[i] = sc.nextInt();
		}
		int[] arr = new int[k];
		for (int i =0 ; i < k; ++i){
		    arr[i] = sc.nextInt();
		}
		Arrays.sort(arr);
		
		int[] dis = new int[k+1];
		int prev = 0;
		for (int i = 0; i < k; ++i){
		    int cur = arr[i];
		    dis[i] = cur - prev;
		    prev = cur;
		}
		dis[k] = s - prev;
		Arrays.sort(dis);
		int[] pre = new int[k+1];
		for (int i = 0; i <= k; ++i){
		    pre[i] = i > 0 ? dis[i] + pre[i-1] : dis[i];
		   // System.out.print(dis[i] + " ");
		}
		
		// Work
		int best = -1;
		for (int i = 0; i < n; ++i){
		    if (v[i] < dis[k]){
		        continue;
		    }
		    int lo = 0, hi = k;
		    int mPos = -1;
		    while (lo <= hi){
		        int mid = lo + (hi - lo) / 2;
		        int z = dis[mid] * 2;
		        if (z <= v[i]){
		            mPos = mid;
		            lo = mid + 1;
		        }else{
		            hi = mid - 1;
		        }
		    }
		    
		    int turbo = mPos >= 0 ? pre[mPos] : 0;
		    if (mPos < k){
		        turbo += v[i] - dis[mPos + 1];
		    }
		    int rem = (s - turbo) * 2;
		    int total = turbo + rem;
		    //System.out.println(mPos + " " + total);
		    if (total <= t){
		        best = best == - 1 ? c[i] : Math.min(best, c[i]);
		    }
		}
		
		System.out.println(best);
	}
	
		    //-----------PrintWriter for faster output---------------------------------
   public static PrintWriter out;
      
   //-----------MyScanner class for faster input----------
   public static class MyScanner {
      BufferedReader br;
      StringTokenizer st;
 
      public MyScanner() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
 
      String next() {
          while (st == null || !st.hasMoreElements()) {
              try {
                  st = new StringTokenizer(br.readLine());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          return st.nextToken();
      }
 
      int nextInt() {
          return Integer.parseInt(next());
      }
 
      long nextLong() {
          return Long.parseLong(next());
      }
 
      double nextDouble() {
          return Double.parseDouble(next());
      }
 
      String nextLine(){
          String str = "";
      try {
         str = br.readLine();
      } catch (IOException e) {
         e.printStackTrace();
      }
      return str;
      }

   }
}
