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



/**
 *
 * @author Ahmed_Naser
 */
 public class Main {

     static int cars[][] ;
     static int gas_station[] ;
    public static void main(String[] args) {
         java.util. Scanner in = new java.util.Scanner(System.in);

         
         int n = in.nextInt(), k  = in.nextInt() ; 

         long cinema = in.nextLong() , time = in.nextLong();
         
         cars = new int[n][2];
         
        for (int i = 0; i < n ; i++)
        {
            for (int j = 0; j < 2; j++) {
                cars[i][j] = in.nextInt();
            }
 
        }
        
        gas_station = new int[k];
        for (int i = 0; i < k ; i++)
        {
            gas_station[i] = in.nextInt();
        }
  /*      
      java.util.Arrays.sort(cars, new java.util.Comparator<int[]>() {
    public int compare(int[] a, int[] b) {
        return Integer.compare(a[1], b[1]);
    }
});
    */  
      
   java.util.Arrays.sort(gas_station);  
   
   int  min = Integer.MAX_VALUE ;
        for (int i = 0; i < cars.length; i++)
        {
           int fuel = cars[i][1];
            if(check(fuel , time, cinema))
            {
                min = Math.min(cars[i][0], min);
            }
           
        }
      /*
    int low  = 1 , high = n , index = 0, min = Integer.MAX_VALUE;
    
        while(low <= high){
             
             int mid  = low + (high - low)/2;
             int fuel = gas_station[mid-1];
             
             if(check(fuel , time, cinema))
             {
                  high = mid - 1 ;
               
                index = (mid - 1);
             }
             else
             {
                 low = mid + 1 ;
             }
         }
        
        //min number of price 
        for (int i = index; i < n; i++) {
            if(cars[i][0] < min)
            {
                min = cars[i][0];
            }
            
        }*/
      if(min == Integer.MAX_VALUE)
        System.out.println("-1");
      else
      {
       System.out.println(min);   
      }
        
    }
    
     
    public static boolean check(long fuel , long time  , long s)
    {
       
     
        long last_station = 0 , fulltime = 0,accelerated_mode = 0 ;
        boolean mark = true; 
        
        for (int i = 0; i < Main.gas_station.length; i++) 
        {
         
          long distance = Main.gas_station[i] - last_station;
          fulltime = distance ;
          if(fulltime <= time && time > 0 )
          {
              if(!(fuel - (distance * 2) > 0))
              {
                long normal_mode =  (distance * 2 ) - fuel ;
                
                if(normal_mode <= distance)
                {
                   accelerated_mode =  distance - normal_mode ; 
                }
                else
                {
                    mark = false ; 
                  break; 
                }
                  
                fulltime = ((normal_mode * 2 )+ accelerated_mode);
                
              }
             time = time - fulltime;
         
                last_station = Main.gas_station[i];   
          } 
          else{
              mark = false ;
              break ; 
          }
          
                   
        }
        
        accelerated_mode = 0 ;
        if(mark)
        {
            long distance = s - last_station;
                 
          if(distance <= time )
          {
              if(!(fuel - (distance * 2) > 0))
              {
               long normal_mode =  (distance * 2) - (fuel)  ;
                
                if(normal_mode <= distance)
                {
                   accelerated_mode =  distance - normal_mode ; 
                }
                else{
                    return false ; 
                }
              
                  
                fulltime = ((normal_mode * 2 )+ accelerated_mode);
                if((time - fulltime ) >= 0)
                    return true;
                
              }
          }
        
          
        }
        return false ;
    }
    
    
}
