import heapq INF = 10**18 def dijkstra(s, edge): n = len(edge) dist = [INF]*n dist[s] = 0 edgelist = [] heapq.heappush(edgelist,(dist[s], s)) while edgelist: minedge = heapq.heappop(edgelist) if dist[minedge[1]] < minedge[0]: continue v = minedge[1] for e in edge[v]: if dist[e[1]] > dist[v]+e[0]: dist[e[1]] = dist[v]+e[0] heapq.heappush(edgelist,(dist[e[1]], e[1])) return dist import sys import io, os input = sys.stdin.readline #input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline h, w = map(int, input().split()) u, d, r, l, k, p = map(int, input().split()) g = [[] for i in range(h*w)] xs, ys, xt, yt = map(int, input().split()) xs, ys, xt, yt = xs-1, ys-1, xt-1, yt-1 C = [str(input().rstrip()) for i in range(h)] for i in range(h): for j in range(w): a = i*w+j if i > 0: b = (i-1)*w+j if C[i-1][j] == '.': g[a].append((u, b)) elif C[i-1][j] == '@': g[a].append((u+p, b)) if i < h-1: b = (i+1)*w+j if C[i+1][j] == '.': g[a].append((d, b)) elif C[i+1][j] == '@': g[a].append((d+p, b)) if j < w-1: b = i*w+j+1 if C[i][j+1] == '.': g[a].append((r, b)) elif C[i][j+1] == '@': g[a].append((r+p, b)) if j > 0: b = i*w+j-1 if C[i][j-1] == '.': g[a].append((l, b)) elif C[i][j-1] == '@': g[a].append((l+p, b)) s = xs*w+ys t = xt*w+yt D = dijkstra(s, g) #print(D[t]) if D[t] <= k: print('Yes') else: print('No')