#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n,m,k,s[10000],a[10000],dist[10000],vis[10000],cnt,ans,head[10000],s1;
typedef struct{
int u,v,w,next;
}Node;
Node edge[10000];
void SPFA(){
queue <int> q;
q.push(s1);
vis[s1] = 1;
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = head[u]; i > 0; i = edge[i].next){
int v = edge[i].v;
int w = edge[i].w;
if(dist[v] > dist[u] + w){
dist[v] = dist[u] + w;
if(!vis[v]){
vis[v] = 1;
q.push(v);
}
}
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
memset(head,0,sizeof(head));
ans = 0;
cnt = 0;
memset(s,0,sizeof(s));
for(int i = 1; i <= n; i++){
scanf("%d",&s[i]);
}
int b[10000];
for(int i = 1; i <= k; i++){
int u,w,v;
scanf("%d%d%d",&u,&v,&w);
cnt++;
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt;
cnt++;
edge[cnt].u = v;
edge[cnt].v = u;
edge[cnt].w = w;
edge[cnt].next = head[v];
head[v] = cnt;
}
memset(dist,INF,sizeof(dist));
int min1 = 99999999;
for(int i = 1; i <= m; i++){
memset(dist,INF,sizeof(dist));
memset(vis,0,sizeof(vis));
dist[i] = 0; //以每个猪圈都为一次起点
s1 = i;
SPFA();
for(int j = 1; j <= n; j++)
ans += dist[s[j]];
if(min1 > ans)
min1 = ans;
ans = 0;
}
printf("%d\n",min1);
return 0;
}