#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
const int MOD = 1e9+7;
const ll INF = LLONG_MAX / 2;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while (t--) {
int n, m, h;
cin >> n >> m >> h;
unordered_set<int> hvertex;
for (int i = 0; i < h; ++i) {
int x;
cin >> x;
hvertex.insert(x);
}
vector<vector<pair<int, int>>> adj(n + 1);
for (int i = 0; i < m; ++i) {
int u, v, w;
cin >> u >> v >> w;
adj[u].emplace_back(v, w);
adj[v].emplace_back(u, w);
}
auto dijkstra = [&](int start) {
vector<vector<ll>> dist(n + 1, vector<ll>(2, INF));
using T = tuple<ll, int, int>; // (distance, node, state)
priority_queue<T, vector<T>, greater<T>> pq;
// Initialize starting node
dist[start][0] = 0;
pq.emplace(0, start, 0);
// If start is H-vertex, initialize state 1
if (hvertex.count(start)) {
dist[start][1] = 0;
pq.emplace(0, start, 1);
}
while (!pq.empty()) {
auto [d, u, s] = pq.top();
pq.pop();
if (d > dist[u][s]) continue;
for (auto [v, w] : adj[u]) {
if (s == 1) {
// Halve the edge weight, transition to state 0
ll new_d = d + w / 2;
if (new_d < dist[v][0]) {
dist[v][0] = new_d;
pq.emplace(new_d, v, 0);
}
} else {
// State 0: pay full weight
ll new_d = d + w;
if (new_d < dist[v][0]) {
dist[v][0] = new_d;
pq.emplace(new_d, v, 0);
}
// If current node (u) is H-vertex, allow halving next edge
if (hvertex.count(u)) {
if (d < dist[v][1]) { // Pay 0 to activate state 1
dist[v][1] = d;
pq.emplace(d, v, 1);
}
}
}
}
}
return dist;
};
auto from_1 = dijkstra(1);
auto from_n = dijkstra(n);
ll ans = INF;
for (int i = 1; i <= n; ++i) {
// Case 1: Current node is H-vertex
if (hvertex.count(i)) {
ll option1 = min(from_1[i][0], from_1[i][1]) +
min(from_n[i][0], from_n[i][1]);
ans = min(ans, option1);
}
// Case 2: Regular node
else {
ll option2 = from_1[i][0] + from_n[i][0];
ans = min(ans, option2);
}
}
if (ans == INF) cout << -1 << endl;
else cout << ans % MOD << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGVuZGwgIlxuIgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgaW50IE1PRCA9IDFlOSs3Owpjb25zdCBsbCBJTkYgPSBMTE9OR19NQVggLyAyOwoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICAKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICAKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbiwgbSwgaDsKICAgICAgICBjaW4gPj4gbiA+PiBtID4+IGg7CiAgICAgICAgCiAgICAgICAgdW5vcmRlcmVkX3NldDxpbnQ+IGh2ZXJ0ZXg7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyArK2kpIHsKICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICBodmVydGV4Lmluc2VydCh4KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmVjdG9yPHZlY3RvcjxwYWlyPGludCwgaW50Pj4+IGFkaihuICsgMSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICAgICAgaW50IHUsIHYsIHc7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICAgICAgYWRqW3VdLmVtcGxhY2VfYmFjayh2LCB3KTsKICAgICAgICAgICAgYWRqW3ZdLmVtcGxhY2VfYmFjayh1LCB3KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgYXV0byBkaWprc3RyYSA9IFsmXShpbnQgc3RhcnQpIHsKICAgICAgICAgICAgdmVjdG9yPHZlY3RvcjxsbD4+IGRpc3QobiArIDEsIHZlY3RvcjxsbD4oMiwgSU5GKSk7CiAgICAgICAgICAgIHVzaW5nIFQgPSB0dXBsZTxsbCwgaW50LCBpbnQ+OyAgLy8gKGRpc3RhbmNlLCBub2RlLCBzdGF0ZSkKICAgICAgICAgICAgcHJpb3JpdHlfcXVldWU8VCwgdmVjdG9yPFQ+LCBncmVhdGVyPFQ+PiBwcTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgc3RhcnRpbmcgbm9kZQogICAgICAgICAgICBkaXN0W3N0YXJ0XVswXSA9IDA7CiAgICAgICAgICAgIHBxLmVtcGxhY2UoMCwgc3RhcnQsIDApOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSWYgc3RhcnQgaXMgSC12ZXJ0ZXgsIGluaXRpYWxpemUgc3RhdGUgMQogICAgICAgICAgICBpZiAoaHZlcnRleC5jb3VudChzdGFydCkpIHsKICAgICAgICAgICAgICAgIGRpc3Rbc3RhcnRdWzFdID0gMDsKICAgICAgICAgICAgICAgIHBxLmVtcGxhY2UoMCwgc3RhcnQsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGF1dG8gW2QsIHUsIHNdID0gcHEudG9wKCk7CiAgICAgICAgICAgICAgICBwcS5wb3AoKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGQgPiBkaXN0W3VdW3NdKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChhdXRvIFt2LCB3XSA6IGFkalt1XSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFsdmUgdGhlIGVkZ2Ugd2VpZ2h0LCB0cmFuc2l0aW9uIHRvIHN0YXRlIDAKICAgICAgICAgICAgICAgICAgICAgICAgbGwgbmV3X2QgPSBkICsgdyAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfZCA8IGRpc3Rbdl1bMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rbdl1bMF0gPSBuZXdfZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBxLmVtcGxhY2UobmV3X2QsIHYsIDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgMDogcGF5IGZ1bGwgd2VpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgIGxsIG5ld19kID0gZCArIHc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfZCA8IGRpc3Rbdl1bMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rbdl1bMF0gPSBuZXdfZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBxLmVtcGxhY2UobmV3X2QsIHYsIDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjdXJyZW50IG5vZGUgKHUpIGlzIEgtdmVydGV4LCBhbGxvdyBoYWx2aW5nIG5leHQgZWRnZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHZlcnRleC5jb3VudCh1KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgPCBkaXN0W3ZdWzFdKSB7ICAvLyBQYXkgMCB0byBhY3RpdmF0ZSBzdGF0ZSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdFt2XVsxXSA9IGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHEuZW1wbGFjZShkLCB2LCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZGlzdDsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIGF1dG8gZnJvbV8xID0gZGlqa3N0cmEoMSk7CiAgICAgICAgYXV0byBmcm9tX24gPSBkaWprc3RyYShuKTsKICAgICAgICAKICAgICAgICBsbCBhbnMgPSBJTkY7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgICAgIC8vIENhc2UgMTogQ3VycmVudCBub2RlIGlzIEgtdmVydGV4CiAgICAgICAgICAgIGlmIChodmVydGV4LmNvdW50KGkpKSB7CiAgICAgICAgICAgICAgICBsbCBvcHRpb24xID0gbWluKGZyb21fMVtpXVswXSwgZnJvbV8xW2ldWzFdKSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluKGZyb21fbltpXVswXSwgZnJvbV9uW2ldWzFdKTsKICAgICAgICAgICAgICAgIGFucyA9IG1pbihhbnMsIG9wdGlvbjEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIENhc2UgMjogUmVndWxhciBub2RlCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGwgb3B0aW9uMiA9IGZyb21fMVtpXVswXSArIGZyb21fbltpXVswXTsKICAgICAgICAgICAgICAgIGFucyA9IG1pbihhbnMsIG9wdGlvbjIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChhbnMgPT0gSU5GKSBjb3V0IDw8IC0xIDw8IGVuZGw7CiAgICAgICAgZWxzZSBjb3V0IDw8IGFucyAlIE1PRCA8PCBlbmRsOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQ==