n,V,ox,oy = map(int,input().split()) L = [list(map(int,input().split())) for _ in range(n)] def Dijkstra(L,r,h,w):#1インデックス dy = [1,-1,0,0] dx = [0,0,1,-1] """ e:隣接リスト (隣接する頂点,重さ) ダイクストラ法。 rから各頂点への最短コスト。 O(ElogV) rはタプル """ import heapq cur = [[float('inf')]*(w+1) for _ in range(h+1)] cur[r[0]][r[1]] = 0#rが初期位置 que = [] """"" cur は 暫定の距離 que は 未確定頂点の番号とcur(仮)のセットのタプルのリスト """"" heapq.heappush(que,(0,r))#入れる while len(que) != 0: c,n = heapq.heappop(que)#未確定頂点のなかの最小値取り出して取得 nが重複している場合も全然ある if cur[n[0]][n[1]] < c:#cur のあたいがすでにかくていした頂点の場合(???未確定頂点からみたときにcurより小さいなら更新される continue for i in range(4): v = n[0]+dy[i] u = n[1]+dx[i] if 0 0: print("YES") exit() cur = Dijkstra(L,(1,1),n,n) if cur[n][n] < V: print("YES") exit() print("NO")