N, V, X, Y = gets.split.take(4).map(&:to_i) X -= 1 Y -= 1 L = N.times.map{ gets.split.take(N).map(&:to_i) } $visited = N.times.map{[false] * N} $oasis = false DIRS = [[1,0], [0,1], [-1, 0], [0,-1]] def f(x, y, hp) # p [x,y,hp] hp -= L[x][y] return false if hp <= 0 return true if x == N-1 && y == N-1 if x == X && y == Y && !$oasis hp *= 2 $oasis = true $visited = N.times.map{[false] * N} $visited[x][y] = true end DIRS.each{|(px, py)| _x = x+px _y = y+py next if !_x.between?(0, N-1) next if !_y.between?(0, N-1) next if $visited[_x][_y] $visited[_x][_y] = true return true if f(_x, _y, hp) $visited[_x][_y] = false } false end p f(0, 0, V)