#include<stdio.h>
#define SIZE 110
#define INF 1000000
int sum=0;
void Floyd(int n,int Graph[][SIZE],int path[][SIZE])
{
int i,j,k;
int A[SIZE][SIZE];
for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
A[i][j] = Graph[i][j];
path[i][j] = -1;
}
}
for(k = 0;k < n;k++)
{
for(i=0;i < n;i++)
{
for(j=0;j < n;j++)
{
if(A[i][j]>A[i][k]+A[k][j])
{
A[i][j] = A[i][k]+A[k][j];
path[i][j] = k;
}
}
}
}
}
void shortpath(int start,int end,int path[][SIZE],int Graph[][SIZE])
{
if(path[start][end] == -1)
{
sum = sum+Graph[start][end];
}
else
{
int mid = path[start][end];
shortpath(start,mid,path,Graph);
shortpath(mid,end,path,Graph);
}
return sum;
}
int main ()
{
int map[SIZE][SIZE];
int start ;
int end;
int vertex;
int i,j,num,na,n2,n3,n4,n5;
int k;
int Ver;
int edge_num;
scanf("%d%d",&vertex,&edge_num);
scanf("%d %d %d %d %d",&n1,&n2,&n3,&n4,&n5);
int arr[5];
arr[0]=n1;
arr[1]=n2;
arr[2]=n3;
arr[3]=n4;
arr[4]=n5;
for(i=0;i<=vertex;i++)
{
for(j=0;j<=vertex;j++)
if(i == j)
{
map[i][j] = 0;
}
else
{
map[i][j] = INF;
}
}
for(k=0;k<edge_num;k++)
{
scanf("%d %d %d",&i,&j,&num);
map[i][j]=num+arr[j-1];
map[j][i]=num+arr[i-1];
}
for(int i=1;i<=vertex;i++)
{
map[i][i]=arr[i];
}
}
int Graph[SIZE][SIZE];
int path[SIZE][SIZE];
int num[5];
int start,end;
int m=0;
for (int i=0;i<vertex;i++)
{
for( int j=0;j<vertex;j++)
{
strat=i;
end=j;
int vertexnum = gen(Graph,start,end);
Floyd(vertexnum,Graph,path);
shortpath(start,end,path,Graph);
num[m]=sum;
m++;
}
}
for(int i=0;i<5;i++)
{
printf("%2d",num[i]);
}
return 0;
}