#include using namespace std; #define int long long int n, m, k; int tot = 0; struct Edge { int u, v, w; bool operator<(Edge R) { return w < R.w; } } e[114514]; int cnt; int fa[114514]; int h[114514]; int siz[114514]; void init(int n) { cnt = n; for (int i = 1; i <= n; ++i) { fa[i] = i; siz[i] = 1; } } int find(int u) { if (fa[u] == u) return u; return fa[u] = find(fa[u]); } void merge(int u, int v) { u = find(u); v = find(v); if (u == v) return; if (h[u] < h[v]) { fa[u] = v; } else { fa[v] = u; if (h[u] == h[v]) h[u]++; } cnt--; } long long kur(int n, int m) { sort(e, e + m); long long sum = 0; for (int i = 0; i < m; ++i) { int u = e[i].u, v = e[i].v; if (find(u) == find(v)) { continue; } merge(u, v); sum += e[i].w; } return (cnt > 1 ? -1 : sum); } signed main() { // ifstream cin("cost.in"); // ofstream cout("cost.out"); cin >> n >> m >> k; init(n); for (int i = 1; i <= m; ++i) { int a, b, c; cin >> a >> b >> c; e[++tot] = {a, b, c}; } for (int i = 1; i <= k; ++i) { int x; cin >> x; e[x].w = 0; } int sumw = 0; for (int i = 1; i <= m; ++i) { sumw += e[i].w; } cout << sumw - kur(n, m); }