#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 201001
#define INF (1ll<<60)
#define LOG 21
#define NAME "EXIT"
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;
ll n, m, k, x, q ;
ll a[MAXN] ;
ll p[MAXN ] ;
ll d[MAXN] ;
ll high[MAXN ] ;
ll lab[MAXN ] ;
vector<pair<ll,ll> > adj_tree[MAXN ] ;
vector<pair<ll,ll> > adj[MAXN ] ;
vector<ll> spec ;
ll par[MAXN][LOG + 1 ] ;
ll mi[MAXN][LOG + 1 ] ;
ll find_set(ll a ) {
return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
}
bool union_set(ll a, ll b ) {
a = find_set(a) ;
b = find_set(b) ;
if(a == b ) return false ;
if(lab[a] > lab[b]) swap(a, b) ;
lab[a] += lab[b] ;
lab[b] = a ;
return true ;
}
struct Edge {
ll u, v, w ;
bool operator < (const Edge & other ) const {
return w > other.w ;
}
};
Edge edge[MAXN ] ;
bool Dijkstra( ) {
FOR(i, 1, n ) d[i] = INF ;
priority_queue<pair<ll,ll>, vector<pair<ll,ll>>, greater<pair<ll,ll>>> pq;
for(ll i : spec ) {
pq.push({0, i}) ;
d[i] = 0 ;
}
while(!pq.empty() ) {
pair<ll,ll> u = pq.top() ;
pq.pop() ;
if(d[u.se ] < u.fi ) continue ;
for(auto [v, w ] : adj[u.se ]) if(d[v] > u.fi + w ) pq.push({d[v] = u.fi + w, v }) ;
}
FOR(i, 1, k ) if(d[p[i]] > x ) return false ;
return true ;
}
ll query(ll u, ll v ) {
if(u == v ) return d[u] ;
if(high[u] < high[v] ) swap(u, v) ;
ll res = INF ;
FORD(i, LOG, 0 ) if(high[par[u][i]] >= high[v] ) {
res = min(res, mi[u][i] ) ;
u = par[u][i] ;
}
if(u == v ) return res ;
FORD(i, LOG, 0 )
if(par[v][i] != par[u][i]) {
res = min(res, mi[v][i]) ;
res = min(res, mi[u][i]) ;
u = par[u][i] ;
v = par[v][i] ;
}
return min ( { res, mi[u][0], mi[v][0] } ) ;
}
void dfs(ll u, ll p ) {
for(pair<ll,ll> v : adj_tree[u]) if(v.fi != p ) {
par[v.fi][0] = u ;
mi[v.fi][0] = v.se ;
FOR(i, 1, LOG ) {
par[v.fi][i] = par[ par[v.fi][i - 1]][i - 1 ] ;
mi[v.fi][i] = min(mi[v.fi][i - 1], mi[par[v.fi][i - 1] ][i - 1 ] ) ;
}
high[v.fi] = high[u] + 1 ;
dfs(v.fi, u ) ;
}
}
void init() {
cin >> n >> m ;
FOR(i, 1, m ) {
ll u, v, w ;
cin >> u >> v >> w ;
edge[i] = {u, v, w } ;
adj[u].push_back({ v, w }) ;
adj[v].push_back({ u, w }) ;
}
cin >> k ;
FOR(i, 1, k ) {
ll x ;
cin >> x ;
spec.push_back(x) ;
}
cin >> q ;
}
void solve() {
Dijkstra() ;
// FOR(i , 1 , n ) debug(d[i]) ;
FOR(i, 1, m ) edge[i].w = min(d[edge[i].u], d[edge[i].v ] ) ;
memset(lab, - 1, sizeof lab ) ;
sort(edge + 1, edge + m + 1 ) ;
FOR(i, 1, m ) {
if(union_set(edge[i].u, edge[i].v )) {
// cout << edge[i].u << " " << edge[i].v << " " << edge[i].w << el ;
adj_tree[edge[i].u].push_back({edge[i].v, edge[i].w }) ;
adj_tree[edge[i].v].push_back({edge[i].u, edge[i].w }) ;
}
}
// cout << " r" << el ;
FOR(i, 0, n ) FOR(j, 0, LOG ) mi[i][j] = INF ;
high[0] = - 1;
dfs(1, 1 ) ;
FOR(cnt, 1, q ) {
ll u, v ;
cin >> u >> v ;
cout << query(u, v ) << el ;
}
}
_ROOT_ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1; // cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBfUk9PVF8gaW50IG1haW4oKQojZGVmaW5lIE0gMTAwMDAwMDAwNwojZGVmaW5lIE1BWE4gMjAxMDAxCiNkZWZpbmUgSU5GICgxbGw8PDYwKQojZGVmaW5lIExPRyAyMQojZGVmaW5lIE5BTUUgIkVYSVQiCiNkZWZpbmUgZGVidWcoYSkgY291dCA8PCAjYSA8PCAiID0gIiA8PCBhIDw8IGVuZGw7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBuLCBtLCBrLCB4LCBxICAgOwpsbCBhW01BWE5dIDsKbGwgcFtNQVhOIF0gOwpsbCBkW01BWE5dIDsKbGwgaGlnaFtNQVhOIF0gOwpsbCBsYWJbTUFYTiBdIDsKdmVjdG9yPHBhaXI8bGwsbGw+ID4gYWRqX3RyZWVbTUFYTiBdIDsKdmVjdG9yPHBhaXI8bGwsbGw+ID4gYWRqW01BWE4gXSA7CnZlY3RvcjxsbD4gc3BlYyA7CgpsbCBwYXJbTUFYTl1bTE9HICsgMSBdIDsKbGwgbWlbTUFYTl1bTE9HICsgMSBdIDsKCmxsIGZpbmRfc2V0KGxsIGEgKSB7CiAgICByZXR1cm4gbGFiW2FdIDwgMCA/IGEgOiBsYWJbYV0gPSBmaW5kX3NldChsYWJbYV0pIDsKfQpib29sIHVuaW9uX3NldChsbCBhLCBsbCBiICkgewogICAgYSA9IGZpbmRfc2V0KGEpIDsKICAgIGIgPSBmaW5kX3NldChiKSA7CiAgICBpZihhID09IGIgKSByZXR1cm4gZmFsc2UgOwogICAgaWYobGFiW2FdID4gbGFiW2JdKSBzd2FwKGEsIGIpIDsKICAgIGxhYlthXSArPSBsYWJbYl0gOwogICAgbGFiW2JdID0gYSA7CiAgICByZXR1cm4gdHJ1ZSA7Cn0KCnN0cnVjdCBFZGdlIHsKICAgIGxsIHUsIHYsIHcgOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBFZGdlICYgb3RoZXIgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHcgPiBvdGhlci53IDsKICAgIH0KfTsKRWRnZSBlZGdlW01BWE4gXSA7Cgpib29sIERpamtzdHJhKCApIHsKICAgIEZPUihpLCAxLCBuICkgZFtpXSA9IElORiA7CiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGxsLGxsPiwgdmVjdG9yPHBhaXI8bGwsbGw+PiwgZ3JlYXRlcjxwYWlyPGxsLGxsPj4+IHBxOwogICAgZm9yKGxsIGkgOiBzcGVjICkgewogICAgICAgIHBxLnB1c2goezAsIGl9KSA7CiAgICAgICAgZFtpXSA9IDAgOwogICAgfQogICAgd2hpbGUoIXBxLmVtcHR5KCkgKSB7CiAgICAgICAgcGFpcjxsbCxsbD4gdSA9IHBxLnRvcCgpIDsKICAgICAgICBwcS5wb3AoKSA7CiAgICAgICAgaWYoZFt1LnNlIF0gPCB1LmZpICkgY29udGludWUgOwogICAgICAgIGZvcihhdXRvIFt2LCB3IF0gOiBhZGpbdS5zZSBdKSBpZihkW3ZdID4gdS5maSArIHcgKSBwcS5wdXNoKHtkW3ZdID0gdS5maSArIHcsIHYgfSkgOwogICAgfQogICAgRk9SKGksIDEsIGsgKSBpZihkW3BbaV1dID4geCApIHJldHVybiBmYWxzZSA7CiAgICByZXR1cm4gdHJ1ZSA7Cn0KCmxsIHF1ZXJ5KGxsIHUsIGxsIHYgKSB7CiAgICBpZih1ID09IHYgKSByZXR1cm4gZFt1XSA7CiAgICBpZihoaWdoW3VdIDwgaGlnaFt2XSAgKSBzd2FwKHUsIHYpIDsKICAgIGxsIHJlcyA9IElORiA7CiAgICBGT1JEKGksIExPRywgMCApIGlmKGhpZ2hbcGFyW3VdW2ldXSA+PSBoaWdoW3ZdICkgewogICAgICAgIHJlcyA9IG1pbihyZXMsIG1pW3VdW2ldICkgOwogICAgICAgIHUgPSBwYXJbdV1baV0gOwogICAgfQogICAgaWYodSA9PSB2ICkgcmV0dXJuIHJlcyA7CiAgICBGT1JEKGksIExPRywgMCApCiAgICBpZihwYXJbdl1baV0gIT0gcGFyW3VdW2ldKSB7CiAgICAgICAgcmVzID0gbWluKHJlcywgbWlbdl1baV0pIDsKICAgICAgICByZXMgPSBtaW4ocmVzLCBtaVt1XVtpXSkgOwogICAgICAgIHUgPSBwYXJbdV1baV0gOwogICAgICAgIHYgPSBwYXJbdl1baV0gOwogICAgfQogICAgcmV0dXJuIG1pbiAoIHsgcmVzLCBtaVt1XVswXSwgbWlbdl1bMF0gfSApIDsKfQoKdm9pZCBkZnMobGwgdSwgbGwgcCApIHsKICAgIGZvcihwYWlyPGxsLGxsPiB2IDogYWRqX3RyZWVbdV0pIGlmKHYuZmkgIT0gcCApIHsKICAgICAgICAgICAgcGFyW3YuZmldWzBdID0gdSA7CiAgICAgICAgICAgIG1pW3YuZmldWzBdID0gdi5zZSA7CiAgICAgICAgICAgIEZPUihpLCAxLCBMT0cgKSB7CiAgICAgICAgICAgICAgICBwYXJbdi5maV1baV0gPSBwYXJbIHBhclt2LmZpXVtpIC0gMV1dW2kgLSAxIF0gOwogICAgICAgICAgICAgICAgbWlbdi5maV1baV0gPSBtaW4obWlbdi5maV1baSAtIDFdLCBtaVtwYXJbdi5maV1baSAtIDFdIF1baSAtIDEgXSApIDsKICAgICAgICAgICAgfQogICAgICAgICAgICBoaWdoW3YuZmldID0gaGlnaFt1XSArIDEgOwogICAgICAgICAgICBkZnModi5maSwgdSApIDsKCiAgICAgICAgfQp9Cgp2b2lkIGluaXQoKSB7CiAgICBjaW4gPj4gbiA+PiBtICA7CiAgICBGT1IoaSwgMSwgbSApIHsKICAgICAgICBsbCB1LCB2LCB3IDsKICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IHcgOwogICAgICAgIGVkZ2VbaV0gPSB7dSwgdiwgdyB9IDsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHsgdiwgdyB9KSA7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh7IHUsIHcgfSkgOwogICAgfQogICAgY2luID4+IGsgOwogICAgRk9SKGksIDEsIGsgKSB7CiAgICAgICAgbGwgeCA7CiAgICAgICAgY2luID4+IHggOwogICAgICAgIHNwZWMucHVzaF9iYWNrKHgpIDsKICAgIH0KICAgIGNpbiA+PiBxIDsKfQoKCnZvaWQgc29sdmUoKSB7CiAgICBEaWprc3RyYSgpIDsKLy8gICAgRk9SKGkgLCAxICwgbiApIGRlYnVnKGRbaV0pIDsKICAgIEZPUihpLCAxLCBtICkgZWRnZVtpXS53ID0gbWluKGRbZWRnZVtpXS51XSwgZFtlZGdlW2ldLnYgXSApIDsKCiAgICBtZW1zZXQobGFiLCAtIDEsIHNpemVvZiBsYWIgKSA7CiAgICBzb3J0KGVkZ2UgKyAxLCBlZGdlICsgbSArIDEgKSA7CgogICAgRk9SKGksIDEsIG0gKSB7CiAgICAgICAgaWYodW5pb25fc2V0KGVkZ2VbaV0udSwgZWRnZVtpXS52ICkpIHsKLy8gICAgICAgICAgICBjb3V0IDw8IGVkZ2VbaV0udSA8PCAiICIgPDwgZWRnZVtpXS52IDw8ICIgIiA8PCBlZGdlW2ldLncgPDwgZWwgOwogICAgICAgICAgICBhZGpfdHJlZVtlZGdlW2ldLnVdLnB1c2hfYmFjayh7ZWRnZVtpXS52LCBlZGdlW2ldLncgfSkgOwogICAgICAgICAgICBhZGpfdHJlZVtlZGdlW2ldLnZdLnB1c2hfYmFjayh7ZWRnZVtpXS51LCBlZGdlW2ldLncgfSkgOwogICAgICAgIH0KICAgIH0KLy8gICAgY291dCA8PCAiIHIiIDw8IGVsIDsKICAgIEZPUihpLCAwLCBuICkgRk9SKGosIDAsIExPRyApIG1pW2ldW2pdID0gSU5GIDsKICAgIGhpZ2hbMF0gPSAtIDE7CiAgICBkZnMoMSwgMSApIDsKICAgIEZPUihjbnQsIDEsIHEgKSB7CiAgICAgICAgbGwgdSwgdiA7CiAgICAgICAgY2luID4+IHUgPj4gdiA7CiAgICAgICAgY291dCA8PCBxdWVyeSh1LCB2ICkgPDwgZWwgOwogICAgfQp9CgpfUk9PVF8gewogICAgLy8gZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwogICAvLyAgZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7IC8vIGNpbiA+PiB0IDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuICgwJjApOwp9Cg==