intone_len(int s){ bool is = is_store[s]; priority_queue<pii,vector<pii>,cmp>ch; for (auto c : nd[s].to) { ch.push(c); } while (!ch.empty()) { pii tmp = ch.top(); if (!(is^is_store[tmp.first])) { //两点属于同一类,继续找 ch.pop(); for (auto t : nd[tmp.first].to) { if(!vised[t.first]) ch.push(t); vised[t.first] = 1; } } else { //不属于同一类,停止 return tmp.second; } } return INF; } intmain(){ int n, m, k; cin >> n >> m >> k; if (k == 0 || n == 1||k==n) { cout << -1; return0; } for (int i = 0; i < m; i++) { int u, v, l; cin >> u >> v >> l; nd[u].to.push_back(pii(v,l)); nd[v].to.push_back(pii(u,l)); } for (int i = 0; i < k; i++) { int a; cin >> a; is_store[a] = 1; storage.push_back(a); } int ans=INF; if (k <= n / 2) { for (auto c : storage) { ans = min(ans, one_len(c)); } } else { for (int i = 1; i <= n; i++) { if (!is_store[i]) { ans = min(ans, one_len(i)); } } } if (ans == INF) { cout << -1; } else { cout << ans; } return0; }