#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 10;
typedef pair<long long, long long> PII;
int n, m, q;
int h[maxn], w[maxn], e[maxn], ne[maxn], idx;
long long dis[maxn];
bool st[maxn];
void add(int a, int b, int c) {
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}
void dijkstra() {
for (int i = 0; i <= n + 3; i++) {
dis[i] = 1e18;
st[i] = false;
}
dis[1] = 0;
///建立一个维护最小值的优先队列
priority_queue<PII, vector<PII>, greater<PII>>heap;
heap.push({0, 1}); ///起始点放入队列
while (heap.size()) {
auto t = heap.top(); ///最小值
heap.pop();
long long ver = t.second, dd = t.first;
if (st[ver]) continue; ///该点更新
st[ver] = true;
for (int i = h[ver]; i != -1; i = ne[i]) {
int j = e[i];
if (dis[j] > dd + w[i]) {
dis[j] = dd + w[i];
heap.push({dis[j], j});
}
}
}
}
int main() {
cin >> n >> m >> q;
memset(h, -1, sizeof h);
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
add(v, u, w);
}
dijkstra();
long long res = 0;
while (q--) {
int x;
cin >> x;
res += dis[x] * 2;
}
cout << res << endl;
return 0;
}