#include<bits/stdc++.h>
using namespace std;
int n,p,c,u,v,w,a,minn,k;
int t[1005],to[2005],val[2005],nxt[2005],h[2005],cnt,dis[1005][1005],disn[1005],b[1005][1005];
priority_queue<int,vector<int>,greater<int> >q;
void add(int a,int b,int c)
{
to[++cnt]=b;
val[cnt]=c;
nxt[cnt]=h[a];
h[a]=cnt;
}
int main()
{
cin>>n>>p>>c;
for(int i=1;i<=n;i++)
cin>>a,t[a]++;
for(int i=1;i<=c;i++)
{
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
for(int l=1;l<=p;l++)
{
for(int i=1;i<=p;i++)
dis[l][i]=0x3fffffff;
dis[l][l]=0;
q.push(l);
for(int i=1;i<=p;i++)
{
minn=0x3fffffff;
k=0;
for(int j=1;j<=p;j++)
{
if((!b[l][j])&&dis[l][j]<minn)
{
minn=dis[l][j];
k=j;
}
}
b[l][k]=1;
if(k==0) break;
for(int j=h[k];j;j=nxt[j])
{
dis[l][to[j]]=min(dis[l][k]+val[j],dis[l][to[j]]);
}
}
}
for(int i=1;i<=p;i++)
for(int j=1;j<=p;j++)
if(dis[j][i]!=0x3fffffff)
disn[i]+=dis[j][i]*t[j];
minn=0x7fffffff;
for(int i=1;i<=p;i++)
{
if(disn[i]<minn)
minn=disn[i];
}
printf("%d",minn);
return 0;
}