import java.util.*; import java.io.*; public class Main { static NODE[][] nodes; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N=Integer.parseInt(st.nextToken()); int V=Integer.parseInt(st.nextToken()); int Ox=Integer.parseInt(st.nextToken()); int Oy=Integer.parseInt(st.nextToken()); PriorityQueue pq=new PriorityQueue<>(new MyComparator()); nodes=new NODE[N][N]; for(int i=0;i0){ update(pq,node,node.x-1,node.y); } if(node.x0){ update(pq,node,node.x,node.y-1); } if(node.y0) ? "YES":"NO"); } else{ int start_to_O=V-nodes[Ox-1][Oy-1].dist; if(start_to_O<=0){ System.out.println("NO"); System.exit(0); }else{ start_to_O*=2; } for(int i=0;i0){ update(pq,node,node.x-1,node.y); } if(node.x0){ update(pq,node,node.x,node.y-1); } if(node.y0) ? "YES":"NO"); } } static void update(PriorityQueue pq,NODE node,int x,int y){ if(nodes[x][y].dist==-1 || nodes[x][y].dist>node.dist+nodes[x][y].level){ nodes[x][y].dist=nodes[x][y].level+node.dist; if(!pq.contains(nodes[x][y])){ pq.offer(nodes[x][y]); } } } } class MyComparator implements Comparator{ public int compare(Object arg0,Object arg1){ NODE x=(NODE) arg0; NODE y=(NODE) arg1; if(x.disty.dist) return 1; else return 0; } } class NODE{ int level,dist,x,y; }