#include <bits/stdc++.h>
using namespace std;
#define F(i,l,r) for(int i=l,i##_end=(int)r;i<i##_end;i++)
#define all(x) (x).begin(), (x).end()
#define pii pair<int, int>
#define f first
#define s second
template<template<typename>class C,typename G>
ostream& operator<<(ostream&os,C<G>x){int f=0;os<<'{';for(auto&i:x)os<<(f++?", ":""),os<<i;os<<"}";return os;}
void _print(){cerr << "]\n";}
template<typename T,typename... V>
void _print(T t,V... v){cerr<<t;if(sizeof...(v))cerr<<", ";_print(v...);}
#ifdef DEBUG
#define dbg(x...) cerr<<"\e[91m"<<__func__<<":"<<__LINE__<<" ["<<#x<<"] = [";_print(x);cerr<<"\e[39m"<< endl;
#else
#define dbg(x...)
#endif
const int N=100005,M=6000005;
int he[N],v[M],ne[M],w[M],z=1,a[N],n,m,k,d[N],f[N];
void ae(int a,int b,int c){v[z]=a;ne[z]=he[b];w[z]=c;he[b]=z++;v[z]=b;ne[z]=he[a];w[z]=c;he[a]=z++;}
mt19937 rn(67);basic_string<int>q[4];
int di(basic_string<int>a,basic_string<int>b){
F(i,0,n+1)d[i]=1e9,f[i]=0;for(auto i:b)f[i]=1;
priority_queue<pii>q;for(auto i:a)q.push(make_pair(d[i]=0,i));
while(q.size()){
int u=q.top().s,w=-q.top().f;q.pop();if(w!=d[u])continue;
if(f[u])return w;
for(int x=he[u];x;x=ne[x]){if(d[v[x]]>w+::w[x]){d[v[x]]=w+::w[x];q.push(make_pair(-d[v[x]],v[x]));}}
}
return 1e9;
}
int32_t main(){
cin.tie(0)->sync_with_stdio(false);
cin>>n>>m>>k;F(i,0,m){int a,b,c;cin>>a>>b>>c;ae(a,b,c);}
F(i,0,k)cin>>a[i];
int ans=2e9;
F(_,0,67){
shuffle(a,a+k,rn);F(i,0,4)q[i].clear();
F(i,0,k/2)q[i&1]+=a[i];
F(i,k/2,k)q[2+(i&1)]+=a[i];
ans=min(ans,di(q[0],q[1])+di(q[2],q[3]));
}
cout<<ans<<"\n";
}