#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { int n, v, ox, oy; cin >> n >> v >> ox >> oy; ox--; oy--; int field[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> field[j][i]; } } int dx[] = {-1, 0, 1, 0}; int dy[] = {0, -1, 0, 1}; int memo[n][n]; memset(memo, 0, sizeof(memo)); queue qu; qu.push(0); // x qu.push(0); // y qu.push(v); // v while (!qu.empty()) { int px = qu.front(); qu.pop(); int py = qu.front(); qu.pop(); int pv = qu.front(); qu.pop(); for (int i = 0; i < 4; i++) { int nx = px+dx[i]; int ny = py+dy[i]; if (nx >= 0 && ny >= 0 && nx < n && ny < n && memo[nx][ny] < pv-field[nx][ny]) { memo[nx][ny] = pv-field[nx][ny]; qu.push(nx); qu.push(ny); qu.push(pv-field[nx][ny]); } } } if (memo[n-1][n-1] > 0) { cout << "YES" << endl; return 0; } if (ox >= 0 && oy >= 0 && memo[ox][oy] > 0) { qu.push(ox); qu.push(oy); qu.push(memo[ox][oy]*2); while (!qu.empty()) { int px = qu.front(); qu.pop(); int py = qu.front(); qu.pop(); int pv = qu.front(); qu.pop(); for (int i = 0; i < 4; i++) { int nx = px+dx[i]; int ny = py+dy[i]; if (nx >= 0 && ny >= 0 && nx < n && ny < n && memo[nx][ny] < pv-field[nx][ny]) { memo[nx][ny] = pv-field[nx][ny]; qu.push(nx); qu.push(ny); qu.push(pv-field[nx][ny]); } } } if (memo[n-1][n-1] > 0) { cout << "YES" << endl; return 0; } } cout << "NO" << endl; }