#include<bits/stdc++.h>
using namespace std;
const int N = 500+5, P = 800+5, C = 1450+5, inf = 0x3f3f3f3f;
int n, p, c;
int h[P], e[2*C], ne[2*C], w[2*C], idx;
int loc[N];
int dis[P];
bool vis[P];
void add(int a, int b, int x){
e[idx] = b, w[idx] = x, ne[idx] = h[a], h[a] = idx++;
}
int spfa(int k){
memset(dis, 0x3f, sizeof dis);
dis[k] = 0;
queue<int> q;
q.push(k), vis[k] = true;
while(q.size()){
int t = q.front();
q.pop();
vis[t] = false;
for(int i=h[t]; ~i; i=ne[i]){
int j = e[i];
if(dis[j]>dis[t]+w[i]){
dis[j] = dis[t]+w[i];
if(!vis[j]){
q.push(j);
vis[j] = true;
}
}
}
}
int res = 0;
for(int i=0; i<n; i++){
if(dis[loc[i]]==inf) return inf;
res += dis[loc[i]];
}
return res;
}
int main(){
scanf("%d%d%d", &n, &p, &c);
memset(h, -1, sizeof h);
for(int i=0; i<n; i++) scanf("%d", &loc[i]);
int a, b, x;
for(int i=0; i<c; i++){
scanf("%d%d%d", &a, &b, &x);
add(a, b, x), add(b, a, x);
}
int ans = inf;
for(int i=1; i<=p; i++){
ans = min(ans, spfa(i));
}
cout<< ans<< endl;
return 0;
}