#include #include #include using namespace std; typedef long long LL; const int N = 100010; struct Edge { int u, v, w; bool is_del; }; int n, m, k, fa[N]; vector edges; LL sum, v; int Find(int x) { if (x != fa[x]) fa[x] = Find(fa[x]); return fa[x]; } int main() { // freopen("cost.in", "r", stdin); // freopen("cost.out", "w", stdout); scanf("%d%d%d", &n, &m, &k); edges.resize(m); sum = 0LL; for (int i = 0; i < m; ++i) { scanf("%d%d%d", &edges[i].u, &edges[i].v, &edges[i].w); sum += edges[i].w; } for (int i = 1; i <= n; ++i) fa[i] = i; v = 0LL; for (int i = 0, x, fu, fv; i < k; ++i) { scanf("%d", &x); --x; v += edges[x].w; edges[x].is_del = true; fu = Find(edges[x].u), fv = Find(edges[x].v); if (fu != fv) fa[fu] = fv; } sort(edges.begin(), edges.end(), [](Edge e1, Edge e2) { return e1.w < e2.w; }); for (Edge e : edges) { if (e.is_del) continue; int fu = Find(e.u), fv = Find(e.v); if (fu != fv) { fa[fu] = fv; v += e.w; } } printf("%lld\n", sum - v); return 0; }