#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int x2, y2;//终点
int chess[6][6];
bool visited[6][6];
int min_cost =INT16_MAX;
void dfs(int x,int y,int cost,int cur_state)
{
//收集结果
if (x == x2 && y == y2)
{
min_cost = min(min_cost,cost);
return;
}
//剪枝
if (cost > min_cost)
{
return;
}
//向下 cur_state * chess[x+1][y]是当前步的花销
if (x < 5&& visited[x + 1][y] == 0)
{
visited[x+1][y] = 1;
dfs(x+1,y, cost + cur_state * chess[x+1][y], (cur_state * chess[x+1][y]) % 4 + 1);
visited[x+1][y] = 0;
}
//向右
if (y < 5&& visited[x][y+1] == 0)
{
visited[x][y+1] = 1;
dfs(x,y+1, cost + cur_state * chess[x][y + 1], ( cur_state * chess[x][y + 1]) % 4 + 1);
visited[x][y + 1] = 0;
}
//向左
if (y > 0&& visited[x][y - 1] == 0)
{
visited[x][y - 1] = 1;
dfs(x,y-1, cost + cur_state * chess[x][y - 1], ( cur_state * chess[x][y - 1]) % 4 + 1);
visited[x][y - 1] = 0;
}
//向上
if (x > 0&& visited[x - 1][y] == 0)
{
visited[x-1][y] = 1;
dfs(x-1,y, cost + cur_state * chess[x - 1][y], ( cur_state * chess[x - 1][y]) % 4 + 1);
visited[x - 1][y] = 0;
}
}
int main() {
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
cin >> chess[i][j];
}
}
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
visited[i][j] = 0;
}
}
int x1, y1;//起点
cin >> x1 >> y1 >> x2 >> y2;
visited[x1][y1] = 1;
dfs(x1,y1,0,1);
cout << min_cost << endl;
}
// 64 位输出请用 printf("%lld")