#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

const int maxn=10;
int Map[maxn][maxn];

void floyd(){
	for(int k=0; k<maxn; k++)    //每次加入一个结点更新全图 
		for(int i=0; i<maxn; i++)
			for(int j=0; j<maxn; j++)
				Map[i][j]=min(Map[i][j], Map[i][k]+Map[k][j]);
}

int main(){
	int H, W, num, temp;
	
	while(scanf("%d%d", &H, &W)!=EOF){
		num=0;
		for(int i=0; i<10; i++)
			for(int j=0; j<10; j++)
				scanf("%d", &Map[i][j]);
		
		floyd();
		for(int i=0; i<H; i++){
			for(int j=0; j<W; j++){
				scanf("%d", &temp);
				if(temp==-1 || temp==1)
					continue;
				else
					num+=Map[temp][1];
			}
		}
		printf("%d\n", num);	
	}
	
	return 0;
}