#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int N, V, OX, OY; int L[600][600]; int cost[600][600]; int dy[] = {1,-1,0,0}; int dx[] = {0,0,1,-1}; const int INF = 1 << 25; int dijkstra(int sx, int sy, int gx, int gy){ for(int i=0;i, vector>, greater>> Q; Q.push(make_pair(0, sx * N + sy)); while(!Q.empty()){ auto now = Q.top(); Q.pop(); int x = now.second / N; int y = now.second % N; int c = now.first; for(int i=0;i<4;i++){ int nx = x + dx[i]; int ny = y + dy[i]; if(nx < 0 || nx >= N)continue; if(ny < 0 || ny >= N)continue; int nc = c + L[nx][ny]; if(nc < cost[nx][ny]){ cost[nx][ny] = nc; Q.push(make_pair(nc, nx * N + ny)); } } } return cost[gx][gy]; } int main(){ cin >> N >> V >> OX >> OY; for(int i=0;i> L[i][j]; } } OX--; OY--; bool res = false; if(OX >= 0 && OY >= 0){ int oasisCost = dijkstra(0, 0, OX, OY); int nv = V; nv -= oasisCost; if(nv > 0){ nv *= 2; int goalCost = dijkstra(OX, OY, N-1, N-1); nv -= goalCost; if(nv > 0){ res = true; } } } int goalCost = dijkstra(0, 0, N-1, N-1); if(V - goalCost > 0)res = true; cout << (res ? "YES" : "NO") << endl; return 0; }