#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF = 1e9;
int t;
int n,m,k;
int u,v,w;
vector<pair<int, int>> a[100001];
int p[100001];
int f[100001];
bool vis[100001];
int x;
int dij(int start){
memset(f,0x3f,sizeof(f));
memset(vis,0,sizeof(vis));
priority_queue<pair<int,int>, vector<pair<int,int> >,greater<pair<int,int> > >q;
f[start] = 0;
q.push({0, start});
while(!q.empty()){
auto [dist, u] = q.top();
q.pop();
if(u != start && p[u]){
return dist;
}
if(vis[u] || dist > f[u]) continue;
vis[u] = true;
for(auto [v, w] : a[u]){
if(f[v] > f[u] + w){
f[v] = f[u] + w;
q.push({f[v], v});
}
}
}
return INF;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin>>t;
while(t -- ){
for(int i = 1; i <= n; i ++ ){
a[i].clear();
}
memset(p, 0, sizeof(p));
cin>>n>>m>>k;
for(int i = 1; i <= m; i ++ ){
cin>>u>>v>>w;
a[u].push_back({v, w});
}
for(int i = 1; i <= k; i ++ ){
cin>>x;
p[x] = 1;
}
int ans = INF;
for(int i = 1; i <= n; i ++ ){
if(p[i]){
int dist = dij(i);
ans = min(ans, dist);
}
}
cout<<ans<<"\n";
}
return 0;
}