#include <bits/stdc++.h>
#define INF 0x7fffffff
using namespace std;
int n,p,c,dis[1500],a[1500],ans=INF;
bool b[1500];
struct node{
int to,w;
}_p;
vector <node> e[1500];
int main()
{
int sum=0;
cin>>n>>p>>c;
for(int i=1;i<=n;i++) {int in; cin>>in; a[in]++;}
for(int i=1;i<=c;i++)
{
int u,v,w;
cin>>u>>v>>w;
_p.to=v;_p.w=w;
e[u].push_back(_p);
_p.to=u;_p.w=w;
e[v].push_back(_p);
}
for(int i=1;i<=p;i++)
{
memset(b,false,sizeof b);
for(int i=1;i<=n;i++)
dis[i]=INF;
dis[i]=0;
priority_queue < pair<int,int> > q;
q.push(make_pair(0,i));
while(q.size())
{
int k=-q.top().first,u=q.top().second;
q.pop();
if(b[u]) continue;
b[u]=true;
for(auto v:e[u])
if(dis[v.to]>k+v.w)
{
dis[v.to]=k+v.w;
q.push(make_pair(-dis[v.to],v.to));
}
}
sum=0;
for(int j=1;j<=p;j++)
sum+=dis[j]*a[j];
ans=min(ans,sum);
}
cout<<ans;
return 0;
}