import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
int nums[][] = new int[m][n];
for (int i = 0; i < m; i++) {
String s = in.next();
for (int j = 0; j < n; j++) {
if (s.charAt(j) == '#') nums[i][j] = 1;
}
}
int sx = in.nextInt() - 1;
int sy = in.nextInt() - 1;
int x1 = in.nextInt() - 1;
int y1 = in.nextInt() - 1;
int x2 = in.nextInt() - 1;
int y2 = in.nextInt() - 1;
int x3 = in.nextInt() - 1;
int y3 = in.nextInt() - 1;
int ex = in.nextInt() - 1;
int ed = in.nextInt() - 1;
int t1 = in.nextInt();
int t2 = in.nextInt();
int t3 = in.nextInt();
int count[] = new int[3];
Arrays.fill(count, -1);
int min = Integer.MAX_VALUE;
Deque<int[]> dq = new ArrayDeque<>();
dq.offer(new int[] {ex, ed});
nums[ex][ed] = 1;
int dirs[][] = new int[][] {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int step = 0;
int sum = 0;
boolean flag = false;
while (!dq.isEmpty()) {
int size = dq.size();
while (size-- > 0) {
int num[] = dq.poll();
int x = num[0];
int y = num[1];
if (x == x1 && y == y1) {
count[0] = step;
sum++;
if (sum == 3) {
flag = true;
break;
}
} else if (x == x2 && y == y2) {
count[1] = step;
sum++;
if (sum == 3) {
flag = true;
break;
}
} else if (x == x3 && y == y3) {
count[2] = step;
sum++;
if (sum == 3) {
flag = true;
break;
}
}
for (int dir[] : dirs) {
int dx = x + dir[0];
int dy = y + dir[1];
if (dx >= 0 && dx < m && dy >= 0 && dy < n && nums[dx][dy] == 0) {
nums[dx][dy] = 1;
dq.offer(new int[] {dx, dy});
}
}
}
if (flag) break;
step++;
}
for (int i = 0; i < 3; i++) {
if (count[i] != -1) {
int t = count[i] * (t1 + t2 + t3 + 1);
if (i == 0) {
int x = Math.abs(sx - x2) + Math.abs(sy - y2);
int y = Math.abs(x3 - x2) + Math.abs(y3 - y2);
int z = Math.abs(x3 - x1) + Math.abs(y3 - y1);
int s1 = x + (t2 + 1) * y + (t2 + t3 + 1) * z;
x = Math.abs(sx - x3) + Math.abs(sy - y3);
z = Math.abs(x2 - x1) + Math.abs(y2 - y1);
int s2 = x + (t3 + 1) * y + (t2 + t3 + 1) * z;
t += Math.min(s1, s2);
} else if (i == 1) {
int x = Math.abs(sx - x1) + Math.abs(sy - y1);
int y = Math.abs(x3 - x1) + Math.abs(y3 - y1);
int z = Math.abs(x3 - x2) + Math.abs(y3 - y2);
int s1 = x + (t1 + 1) * y + (t1 + t3 + 1) * z;
x = Math.abs(sx - x3) + Math.abs(sy - y3);
z = Math.abs(x2 - x3) + Math.abs(y2 - y3);
int s2 = x + (t3 + 1) * y + (t1 + t3 + 1) * z;
t += Math.min(s1, s2);
} else {
int x = Math.abs(sx - x1) + Math.abs(sy - y1);
int y = Math.abs(x1 - x2) + Math.abs(y1 - y2);
int z = Math.abs(x3 - x2) + Math.abs(y3 - y2);
int s1 = x + (t1 + 1) * y + (t2 + t1 + 1) * z;
x = Math.abs(sx - x2) + Math.abs(sy - y2);
z = Math.abs(x3 - x1) + Math.abs(y3 - y1);
int s2 = x + (t2 + 1) * y + (t2 + t1 + 1) * z;
t += Math.min(s1, s2);
}
min = Math.min(min, t);
}
}
System.out.println(min);
}
}