H, W = gets.split(" ").map{|s| s.to_i} U, D, R, L, K, P = gets.split(" ").map{|s| s.to_i} xs, ys, xt, yt = gets.split(" ").map{|s| s.to_i - 1} c = [] H.times { c << gets.strip } dir = [[-1, 0, U], [1, 0, D], [0, 1, R], [0, -1, L]] d = Array.new(H) {Array.new(W, Float::INFINITY)} d[xs][ys] = 0 que = [[xs, ys, 0]] while que.length > 0 do x, y, cost = que.shift dir.each {|dx, dy, dc| nx, ny = x + dx, y + dy next if nx < 0 or nx >= H or ny < 0 or ny >= W or c[nx][ny] == "#" nc = cost + dc + (c[nx][ny] == "@" ? P : 0) if d[nx][ny] > nc then d[nx][ny] = nc que << [nx, ny, nc] end } end puts d[xt][yt] <= K ? "Yes" : "No"