#include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll; using namespace std; #define mod 1000003 #define INF 1000000000 #define LLINF 2000000000000000000LL #define SIZE 10000 int mo[5] = {0,1,0,-1,0}; int main(){ int n,v,ox,oy,nowv,a,b; int l[210][210]; bool visit_bf[210][210]={0},visit_oa[210][210]={0}; scanf("%d%d%d%d",&n,&v,&ox,&oy); ox--; oy--; for(int i=0;i > > pq,pq_oa; pq.push({v,{0,0}}); while(pq.size()){ pair > p = pq.top(); pq.pop(); nowv = p.first; a = p.second.first; b = p.second.second; if(visit_bf[a][b]) continue; visit_bf[a][b] = true; if(nowv<=0) continue; if(b==ox && a==oy){ pq_oa.push({nowv*2,{a,b}}); } if(a==n-1 && b==n-1){ puts("YES"); return 0; } for(int i=0;i<4;i++){ if(a+mo[i]<0 || b+mo[i+1]<0 || n<=a+mo[i] || n<=b+mo[i+1]) continue; pq.push({nowv-l[a+mo[i]][b+mo[i+1]],{a+mo[i],b+mo[i+1]}}); } } while(pq_oa.size()){ pair > p = pq_oa.top(); pq_oa.pop(); nowv = p.first; a = p.second.first; b = p.second.second; if(visit_oa[a][b]) continue; visit_oa[a][b] = true; if(nowv<=0) continue; if(a==n-1 && b==n-1){ puts("YES"); return 0; } for(int i=0;i<4;i++){ if(a+mo[i]<0 || b+mo[i+1]<0 || n<=a+mo[i] || n<=b+mo[i+1]) continue; pq_oa.push({nowv-l[a+mo[i]][b+mo[i+1]],{a+mo[i],b+mo[i+1]}}); } } puts("NO"); return 0; }