#include <bits/stdc++.h>
#define ll long long
#define INF 1000000005
#define MOD 1000000007
#define EPS 1e-10
#define rep(i,n) for(int i=0;i<n;++i)

using namespace std;

typedef pair<int,int>P;

const int MAX_N = 31;

struct edge{
    int to;
    int cost;
};

int a[MAX_N][MAX_N];
vector<edge> G[4*MAX_N*MAX_N];
int c[5];
int w,h;
int d[4*MAX_N*MAX_N];


void dijkstra(int s)
{
	priority_queue<P,vector<P>,greater<P> > que;
	d[s] = 0;
	que.push(P(0,s));
	while(!que.empty()){
		P p = que.top();
		que.pop();
		int v = p.second;
		if(d[v] < p.first) continue;
		vector<edge>::iterator it = G[v].begin();
		rep(i,G[v].size()){
			if(d[G[v][i].to] > d[v] + G[v][i].cost){
				d[G[v][i].to] = d[v] + G[v][i].cost;
				que.push(P(d[G[v][i].to],G[v][i].to));
			}
		}
	}
}

int main()
{
    while(1){
        scanf("%d%d",&w,&h);
        if(w == 0 && h == 0){
            break;
        }
        rep(i,4*w*h){
            G[i].clear();
            d[i] = INF;
        }
    	rep(i,h){
    		rep(j,w){
                scanf("%d",&a[i][j]);
            }
    	}
        rep(i,4){
            scanf("%d",&c[i]);
        }
        rep(i,h){
            rep(j,w){
                if(a[i][j] == 0 || a[i][j] == 4){
                    if(a[i][j] == 4){
                        if(i < h-1){
                            G[4*(w*i + j)].push_back((edge){4*(w*(i+1) + j),c[0]});
                            G[4*(w*i + j)+1].push_back((edge){4*(w*(i+1) + j),c[1]});
                            G[4*(w*i + j)+3].push_back((edge){4*(w*(i+1) + j),c[2]});
                            G[4*(w*i + j)+2].push_back((edge){4*(w*(i+1) + j),c[3]});
                        }
                        if(j < w-1){
                            G[4*(w*i + j)+1].push_back((edge){4*(w*i + j+1)+1,c[0]});
                            G[4*(w*i + j)+3].push_back((edge){4*(w*i + j+1)+1,c[1]});
                            G[4*(w*i + j)+2].push_back((edge){4*(w*i + j+1)+1,c[2]});
                            G[4*(w*i + j)].push_back((edge){4*(w*i + j+1)+1,c[3]});
                        }
                        if(0 < j){
                            G[4*(w*i + j)+2].push_back((edge){4*(w*i + j-1)+2,c[0]});
                            G[4*(w*i + j)].push_back((edge){4*(w*i + j-1)+2,c[1]});
                            G[4*(w*i + j)+1].push_back((edge){4*(w*i + j-1)+2,c[2]});
                            G[4*(w*i + j)+3].push_back((edge){4*(w*i + j-1)+2,c[3]});
                        }
                        if(0 < i){
                            G[4*(w*i + j)+3].push_back((edge){4*(w*(i-1) + j)+3,c[0]});
                            G[4*(w*i + j)+2].push_back((edge){4*(w*(i-1) + j)+3,c[1]});
                            G[4*(w*i + j)].push_back((edge){4*(w*(i-1) + j)+3,c[2]});
                            G[4*(w*i + j)+1].push_back((edge){4*(w*(i-1) + j)+3,c[3]});
                        }
                    }else{
                        if(i < h-1){
                            G[4*(w*i + j)].push_back((edge){4*(w*(i+1) + j),0});
                            G[4*(w*i + j)+1].push_back((edge){4*(w*(i+1) + j),c[1]});
                            G[4*(w*i + j)+3].push_back((edge){4*(w*(i+1) + j),c[2]});
                            G[4*(w*i + j)+2].push_back((edge){4*(w*(i+1) + j),c[3]});
                        }
                        if(j < w-1){
                            G[4*(w*i + j)+1].push_back((edge){4*(w*i + j+1)+1,0});
                            G[4*(w*i + j)+3].push_back((edge){4*(w*i + j+1)+1,c[1]});
                            G[4*(w*i + j)+2].push_back((edge){4*(w*i + j+1)+1,c[2]});
                            G[4*(w*i + j)].push_back((edge){4*(w*i + j+1)+1,c[3]});
                        }
                        if(0 < j){
                            G[4*(w*i + j)+2].push_back((edge){4*(w*i + j-1)+2,0});
                            G[4*(w*i + j)].push_back((edge){4*(w*i + j-1)+2,c[1]});
                            G[4*(w*i + j)+1].push_back((edge){4*(w*i + j-1)+2,c[2]});
                            G[4*(w*i + j)+3].push_back((edge){4*(w*i + j-1)+2,c[3]});
                        }
                        if(0 < i){
                            G[4*(w*i + j)+3].push_back((edge){4*(w*(i-1) + j)+3,0});
                            G[4*(w*i + j)+2].push_back((edge){4*(w*(i-1) + j)+3,c[1]});
                            G[4*(w*i + j)].push_back((edge){4*(w*(i-1) + j)+3,c[2]});
                            G[4*(w*i + j)+1].push_back((edge){4*(w*(i-1) + j)+3,c[3]});
                        }
                    }
                }else if(a[i][j] == 1){
                    if(0 < j){
                        G[4*(w*i + j)].push_back((edge){4*(w*i + j-1)+2,0});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*i + j-1)+2,c[0]});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*i + j-1)+2,c[2]});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*i + j-1)+2,c[3]});
                    }
                    if(i < h-1){
                        G[4*(w*i + j)+1].push_back((edge){4*(w*(i+1) + j),0});
                        G[4*(w*i + j)].push_back((edge){4*(w*(i+1) + j),c[0]});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*(i+1) + j),c[2]});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*(i+1) + j),c[3]});
                    }
                    if(0 < i){
                        G[4*(w*i + j)+2].push_back((edge){4*(w*(i-1) + j)+3,0});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*(i-1) + j)+3,c[0]});
                        G[4*(w*i + j)].push_back((edge){4*(w*(i-1) + j)+3,c[2]});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*(i-1) + j)+3,c[3]});
                    }
                    if(j < w-1){
                        G[4*(w*i + j)+3].push_back((edge){4*(w*i + j+1)+1,0});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*i + j+1)+1,c[0]});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*i + j+1)+1,c[2]});
                        G[4*(w*i + j)].push_back((edge){4*(w*i + j+1)+1,c[3]});
                    }
                }else if(a[i][j] == 2){
                    if(0 < i){
                        G[4*(w*i + j)].push_back((edge){4*(w*(i-1) + j)+3,0});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*(i-1) + j)+3,c[0]});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*(i-1) + j)+3,c[1]});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*(i-1) + j)+3,c[3]});
                    }
                    if(0 < j){
                        G[4*(w*i + j)+1].push_back((edge){4*(w*i + j-1)+2,0});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*i + j-1)+2,c[0]});
                        G[4*(w*i + j)].push_back((edge){4*(w*i + j-1)+2,c[1]});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*i + j-1)+2,c[3]});
                    }
                    if(j < w-1){
                        G[4*(w*i + j)+2].push_back((edge){4*(w*i + j+1)+1,0});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*i + j+1)+1,c[0]});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*i + j+1)+1,c[1]});
                        G[4*(w*i + j)].push_back((edge){4*(w*i + j+1)+1,c[3]});
                    }
                    if(i < h-1){
                        G[4*(w*i + j)+3].push_back((edge){4*(w*(i+1) + j),0});
                        G[4*(w*i + j)].push_back((edge){4*(w*(i+1) + j),c[0]});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*(i+1) + j),c[1]});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*(i+1) + j),c[3]});
                    }
                }else if(a[i][j] == 3){
                    if(j < w-1){
                        G[4*(w*i + j)].push_back((edge){4*(w*i + j+1)+1,0});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*i + j+1)+1,c[0]});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*i + j+1)+1,c[1]});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*i + j+1)+1,c[2]});
                    }
                    if(0 < i){
                        G[4*(w*i + j)+1].push_back((edge){4*(w*(i-1) + j)+3,0});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*(i-1) + j)+3,c[0]});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*(i-1) + j)+3,c[1]});
                        G[4*(w*i + j)].push_back((edge){4*(w*(i-1) + j)+3,c[2]});
                    }
                    if(i < h-1){
                        G[4*(w*i + j)+2].push_back((edge){4*(w*(i+1) + j),0});
                        G[4*(w*i + j)].push_back((edge){4*(w*(i+1) + j),c[0]});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*(i+1) + j),c[1]});
                        G[4*(w*i + j)+3].push_back((edge){4*(w*(i+1) + j),c[2]});
                    }
                    if(0 < j){
                        G[4*(w*i + j)+3].push_back((edge){4*(w*i + j-1)+2,0});
                        G[4*(w*i + j)+2].push_back((edge){4*(w*i + j-1)+2,c[0]});
                        G[4*(w*i + j)].push_back((edge){4*(w*i + j-1)+2,c[1]});
                        G[4*(w*i + j)+1].push_back((edge){4*(w*i + j-1)+2,c[2]});
                    }
                }
            }
        }
        int res = INF;
        dijkstra(1);
        rep(i,4){
            res = min(res,d[4*(w*(h-1) + w-1)+i]);
        }
        printf("%d\n",res);
    }
	return 0;
}

Measured memory_bytes: 3612