#include using namespace std; int main(){ int N,V,OX,OY; cin >> N >> V >> OX >> OY; OX--; OY--; swap(OX,OY); vector> L(N,vector(N)); for(int i=0;i> L[i][j]; vector>> dp(N,vector>(N,vector(2,-1000000000))); dp[0][0][0] = V; vector dx = {1,-1,0,0}; vector dy = {0,0,1,-1}; priority_queue,int>>,vector,int>>>,less,int>>>> que; que.push(make_pair(V,make_pair(make_pair(0,0),0))); while(!que.empty()){ int x = que.top().second.first.first; int y = que.top().second.first.second; int o = que.top().second.second; int H = que.top().first; que.pop(); if(H < dp[x][y][o]) continue; for(int i=0;i<4;i++){ int nx = x+dx[i]; int ny = y+dy[i]; if(nx < 0 || nx >= N || ny < 0 || ny >= N) continue; if(H-L[nx][ny] <= 0) continue; int NH = H-L[nx][ny]; if(dp[nx][ny][o] < NH){ dp[nx][ny][o] = NH; que.push(make_pair(NH,make_pair(make_pair(nx,ny),o))); } if(o == 0 && OX == nx && OY == ny){ NH *= 2; dp[nx][ny][1] = NH; que.push(make_pair(NH,make_pair(make_pair(nx,ny),1))); } } } if(dp[N-1][N-1][0] > 0 || dp[N-1][N-1][1] > 0) cout << "YES" << endl; else cout << "NO" << endl; }