#include<bits/stdc++.h>
using namespace std;
int dist[810],pos[510];
int pre[810],h[3000],nxt[3000],w[3000],idx,ans=INT_MAX;
bool vis[810];
int n,p,c;
typedef pair<int,int> PII;
priority_queue<PII,vector<PII>,greater<PII>> q;
void add(int x,int y,int z) {
h[++idx]=y;
nxt[idx]=pre[x];
w[idx]=z;
pre[x]=idx;
}
void dij(int x) {
dist[x]=0;
q.push({0,x});
while(!q.empty()){
PII tt=q.top();q.pop();
int k=tt.second;
if(vis[k]) continue;
vis[k]=1;
vis[k]=1;
for(int j=pre[k]; j; j=nxt[j]) {
int to=h[j];
if(dist[to]>dist[k]+w[j]){
dist[to]=dist[k]+w[j];
q.push({dist[to],to});
}
}
}
}
int main() {
cin>>n>>p>>c;
for(int i=1; i<=n; i++) {
cin>>pos[i];
}
int x,y,z;
for(int i=1; i<=c; i++) {
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
for(int i=1; i<=p; i++) {
memset(vis,0,sizeof vis);
memset(dist,0x3f,sizeof dist);
dij(i);
int sum=0;
for(int j=1; j<=n; j++) {
sum+=dist[pos[j]];
}
ans=min(ans,sum);
}
cout<<ans;
return 0;
}