#include #include #include using namespace std; struct state_t { int x, y, v; bool operator < (const state_t& rhs) const { return v > desert, memo; priority_queue que; void push(int x, int y, int v) { que.push((state_t){x, y, v}); } int pop(int& x, int& y, int& v) { if(que.empty()) return 0; state_t s=que.top(); x=s.x; y=s.y; v=s.v; que.pop(); return 1; } int max_u(int& m, int v) { if(m0) push(nx, ny, nv); } } /* for(int y=1;y<=n;y++) { for(int x=1;x<=n;x++) printf("%2d ", memo[y][x]); printf("\n"); } */ return memo[n][n]>=0; } int main(void) { int n, v, ox, oy; while(scanf("%d%d%d%d", &n, &v, &ox, &oy)==4) { desert.clear(); memo.clear(); desert.resize(n+2); memo.resize(n+2); for(int y=0;y<=n+1;y++) { desert[y].resize(n+2, v*2+1); memo[y].resize(n+2, -1); } for(int y=1;y<=n;y++) { for(int x=1;x<=n;x++) scanf("%d", &desert[y][x]); } printf("%s\n", solve(n, v, ox, oy)?"YES":"NO"); } return 0; }