#include <stdio.h>
main()
{
//吃了吗
//需要栈
//int NUM1=6;
//int NUM2=4;
int NUM1;
int NUM2;
int i;
scanf("%d",&NUM1);
scanf("%d",&NUM2);
int p[NUM1+1];
p[0]=-1;
/*
p[1]=1;
p[2]=7;
p[3]=3;
p[4]=2;
p[5]=5;
p[6]=6;*/
for(i=1;i<NUM1+1;i++)
{
scanf("%d",&p[i]);
}
int a[NUM1-1];//线路可以染色
int b[NUM1-1];
int c[NUM1-1];
int color[NUM1-1];
for(i=0;i<NUM1-1;i++)
{
color[i]=0;
}
for(i=0;i<NUM1-1;i++)
{
scanf("%d",&a[i]);
scanf("%d",&b[i]);
scanf("%d",&c[i]);
}
/*
a[0]=1,b[0]=2,c[0]=4;
a[1]=1,b[1]=3,c[1]=5;
a[2]=2,b[2]=4,c[2]=1;
a[3]=3,b[3]=5,c[3]=2;
a[4]=3,b[4]=6,c[4]=1; */
int e[NUM2];
int f[NUM2];
for(i=0;i<NUM2;i++)
{
scanf("%d",&e[i]);
scanf("%d",&f[i]);
}
/*
e[0]=2,f[0]=5;
e[1]=4,f[1]=6;
e[2]=6,f[2]=4;
e[3]=5,f[3]=6;*/
int zhan[NUM1];//栈
for(i=0;i<NUM1;i++)
{
zhan[i]=0;
//printf("%d",i);
}
int h=0;
int flag;
int j;
int find;
int lu;
//printf("hello\n");
for(lu=0;lu<NUM2;lu++)
//lu=2;
{
if(lu==2)
{
//break;
}
//printf("lu %d\n",lu);
for(i=0;i<NUM1;i++)
{
zhan[i]=0;
//printf("%d",i);
}
h=0;//栈的使用要小心
for(i=0;i<NUM1-1;i++)
{
color[i]=0;
}//别忘了初始化
zhan[0]=e[lu];//
int nei=-1;
for(find=e[lu];find!=f[lu];)//
//find=e[1];
{
//printf("hello %d\n",lu);
//printf("lu %d\n",lu);
if(nei==0)//从栈里弹出一个
{
//不改变color
h--;
//printf("hello\n");
find=zhan[h];
//break;
}
if(find==e[lu])//
{
//printf("find %d\n",find);
}
nei=0;
for(i=0;i<NUM1-1;i++)
{
if((a[i]==find)&&(color[i]==0))//在数组a中寻找
{
nei=1;
flag=0;
for(j=0;j<=h;j++)//从栈里检查
{
if(zhan[j]==b[i])
{
flag=1;
}
}
if(flag==0)
{
h++;
zhan[h]=b[i];
color[i]=1;
find=b[i];
//printf("find %d\n",find);
}
}
if((b[i]==find)&&(color[i]==0))//在数组b中寻找
{
//printf("%d\n",b[i]);
nei=1;
flag=0;
for(j=0;j<=h;j++)//从栈里检查
{
if(zhan[j]==a[i])
{
flag=1;
//printf("j %d\n",j);
}
}
if(flag==0)
{
//printf("hello\n");
h++;
zhan[h]=a[i];
color[i]=1;
find=a[i];
//printf("find %d\n",find);
}
}
}
//nei=1;
}
for(i=0;i<NUM1;i++)
{
//if(zhan[i]!=0)
{
//printf("%d\n",zhan[i]);
}
//printf("%d",i);
}
//算吃的
int pri=p[zhan[0]];
int money=0;
for(i=0;i<NUM1;i++)
{
if(zhan[i]==0)
{
break;
}
for(j=0;j<NUM1-1;j++)
{
if((a[j]==zhan[i])&&(b[j]==zhan[i+1]))
{
if(p[zhan[i]]<pri)
{
pri=p[zhan[i]];
}
money=money+pri*c[j];
//printf("money %d\n",money);
}
else if((b[j]==zhan[i])&&(a[j]==zhan[i+1]))
{
if(p[zhan[i]]<pri)
{
pri=p[zhan[i]];
}
money=money+pri*c[j];
//printf("money %d\n",money);
}
}
}
printf("%d\n",money);
}
}