#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define rep(i, n) for(int i = 1; (i) <= (n); ++i)
#define forn(i, l, r) for(int i = (l); i <= (r); ++i)
#define ford(i, r, l) for(int i = (r); i >= (l); --i)
#define FOR(i, n) for(int i = 0; i < (n); ++i)
#define FORD(i, n) for(int i = ((n) - 1); i >= 0; --i)
#define fi first
#define se second
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define endl "\n"
#define task "walk"
#define sz(a) int(a.size())
#define C(x, y) make_pair(x, y)
#define all(a) (a).begin(), (a).end()
#define bit(i, mask) (mask >> i & 1)
template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; }
inline int readInt() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();int n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;}
inline ll readLong() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();ll n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;}
inline string readString() {char c;while(c=getchar(),c==' '||c=='\n'||c=='\t');string s({c});while(c=getchar(),c!=EOF&&c!=' '&&c!='\n'&&c!='\t')s+=c;return s;}
const int N = 1e5 + 3;
const int M = 5e5;
const int LOG = 16;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 33;
const int S = 375;
int n, m, k, q;
int D[N], b[N];
vector<pii> g[N];
int par[N], sz[N];
int root(int u) {return u == par[u] ? u : par[u] = root(par[u]);}
bool union_set(int u, int v)
{
if((u = root(u)) == (v = root(v))) return 0;
if(sz[u] < sz[v]) swap(u, v);
par[v] = u;
sz[u] += sz[v];
return 1;
}
void Dijkstra()
{
priority_queue<pii, vector<pii>, greater<pii>> q;
rep(i, n)
{
if(b[i]) D[i] = 0, q.push({0, i});
else D[i] = INF;
}
while(sz(q))
{
pii tmp = q.top();
q.pop();
int dist = tmp.fi, u = tmp.se;
if(D[u] != dist) continue;
for(auto &[v, w] : g[u])
if(minimize(D[v], D[u] + w))
q.push({D[v], v});
}
}
int tin[N], tout[N], timedfs = 0;
int up[N][LOG + 1], min_edge[N][LOG + 1];
void dfs(int u, int p = 1, int w = INF)
{
tin[u] = ++timedfs;
up[u][0] = p;
min_edge[u][0] = w;
forn(i, 1, LOG)
{
up[u][i] = up[up[u][i - 1]][i - 1];
min_edge[u][i] = min(min_edge[u][i - 1], min_edge[up[u][i - 1]][i - 1]);
}
for(auto &[v, wei] : g[u])
if(v != p)
{
dfs(v, u, wei);
}
tout[u] = ++timedfs;
}
bool is_anc(int u, int v)
{
return tin[u] <= tin[v] && tout[v] <= tout[u];
}
int get(int u, int v)
{
int res = INF;
if(is_anc(u, v)) swap(u, v);
ford(i, LOG, 0) if(!is_anc(up[u][i], v))
res = min(res, min_edge[u][i]), u = up[u][i];
if(!is_anc(u, v))
res = min(res, min_edge[u][0]), u = up[u][0];
ford(i, LOG, 0) if(!is_anc(up[v][i], u))
res = min(res, min_edge[v][i]), v = up[v][i];
if(!is_anc(v, u))
res = min(res, min_edge[v][0]);
return res;
}
array<int, 3> e[M];
void solve()
{
cin >> n >> m >> k >> q;
rep(i, m)
{
int u, v, w;
cin >> u >> v >> w;
g[u].pb({v, w});
g[v].pb({u, w});
e[i] = {w, u, v};
}
rep(i, k)
{
int x;
cin >> x;
b[x] = 1;
}
Dijkstra();
rep(i, n) g[i].clear();
rep(i, m)
e[i][0] = min(D[e[i][1]], D[e[i][2]]);
sort(e + 1, e + 1 + m);
rep(i, n) par[i] = i, sz[i] = 1;
ford(i, m, 1) if(union_set(e[i][1], e[i][2]))
{
g[e[i][1]].pb({e[i][2], e[i][0]});
g[e[i][2]].pb({e[i][1], e[i][0]});
}
dfs(1);
rep(i, q)
{
int u, v;
cin >> u >> v;
cout << get(u, v) << endl;
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int TC = 1;
if(fopen(task".inp", "r"))
{
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
// if(fopen("note.inp", "r"))
// {
// freopen("note.inp", "r", stdin);
// freopen("note.out", "w", stdout);
// }
while(TC--)
{
solve();
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwoKI2RlZmluZSByZXAoaSwgbikgZm9yKGludCBpID0gMTsgKGkpIDw9IChuKTsgKytpKQojZGVmaW5lIGZvcm4oaSwgbCwgcikgZm9yKGludCBpID0gKGwpOyBpIDw9IChyKTsgKytpKQojZGVmaW5lIGZvcmQoaSwgciwgbCkgZm9yKGludCBpID0gKHIpOyBpID49IChsKTsgLS1pKQojZGVmaW5lIEZPUihpLCBuKSBmb3IoaW50IGkgPSAwOyBpIDwgKG4pOyArK2kpCiNkZWZpbmUgRk9SRChpLCBuKSBmb3IoaW50IGkgPSAoKG4pIC0gMSk7IGkgPj0gMDsgLS1pKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgcGxsIHBhaXI8bGwsIGxsPgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIHRhc2sgIndhbGsiCiNkZWZpbmUgc3ooYSkgaW50KGEuc2l6ZSgpKQojZGVmaW5lIEMoeCwgeSkgbWFrZV9wYWlyKHgsIHkpCiNkZWZpbmUgYWxsKGEpIChhKS5iZWdpbigpLCAoYSkuZW5kKCkKI2RlZmluZSBiaXQoaSwgbWFzaykgKG1hc2sgPj4gaSAmIDEpCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIG1heGltaXplKFQgJnJlcywgY29uc3QgVCAmdmFsKSB7IGlmIChyZXMgPCB2YWwpeyByZXMgPSB2YWw7IHJldHVybiB0cnVlOyB9OyByZXR1cm4gZmFsc2U7IH0KdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBtaW5pbWl6ZShUICZyZXMsIGNvbnN0IFQgJnZhbCkgeyBpZiAocmVzID4gdmFsKXsgcmVzID0gdmFsOyByZXR1cm4gdHJ1ZTsgfTsgcmV0dXJuIGZhbHNlOyB9CgppbmxpbmUgaW50IHJlYWRJbnQoKSAgICAgICB7Y2hhciBjO3doaWxlKGM9Z2V0Y2hhcigpLGMhPSctJyYmKGM8JzAnfHxjPic5JykpO2Jvb2wgc2lnbj0oYz09Jy0nKTtpZihzaWduKWM9Z2V0Y2hhcigpO2ludCBuPWMtJzAnO3doaWxlKGM9Z2V0Y2hhcigpLGM+PScwJyYmYzw9JzknKW49MTAqbitjLScwJztyZXR1cm4oIXNpZ24pP246LW47fQppbmxpbmUgbGwgcmVhZExvbmcoKSAgICAgICB7Y2hhciBjO3doaWxlKGM9Z2V0Y2hhcigpLGMhPSctJyYmKGM8JzAnfHxjPic5JykpO2Jvb2wgc2lnbj0oYz09Jy0nKTtpZihzaWduKWM9Z2V0Y2hhcigpO2xsICBuPWMtJzAnO3doaWxlKGM9Z2V0Y2hhcigpLGM+PScwJyYmYzw9JzknKW49MTAqbitjLScwJztyZXR1cm4oIXNpZ24pP246LW47fQppbmxpbmUgc3RyaW5nIHJlYWRTdHJpbmcoKSB7Y2hhciBjO3doaWxlKGM9Z2V0Y2hhcigpLGM9PScgJ3x8Yz09J1xuJ3x8Yz09J1x0Jyk7c3RyaW5nIHMoe2N9KTt3aGlsZShjPWdldGNoYXIoKSxjIT1FT0YmJmMhPScgJyYmYyE9J1xuJyYmYyE9J1x0JylzKz1jO3JldHVybiBzO30KCmNvbnN0IGludCBOID0gMWU1ICsgMzsKY29uc3QgaW50IE0gPSA1ZTU7CmNvbnN0IGludCBMT0cgPSAxNjsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBJTkYgPSAxZTkgKyAzMzsKY29uc3QgaW50IFMgPSAzNzU7CgppbnQgbiwgbSwgaywgcTsKCmludCBEW05dLCBiW05dOwp2ZWN0b3I8cGlpPiBnW05dOwppbnQgcGFyW05dLCBzeltOXTsKCmludCByb290KGludCB1KSB7cmV0dXJuIHUgPT0gcGFyW3VdID8gdSA6IHBhclt1XSA9IHJvb3QocGFyW3VdKTt9CmJvb2wgdW5pb25fc2V0KGludCB1LCBpbnQgdikKewogICAgaWYoKHUgPSByb290KHUpKSA9PSAodiA9IHJvb3QodikpKSByZXR1cm4gMDsKICAgIGlmKHN6W3VdIDwgc3pbdl0pIHN3YXAodSwgdik7CiAgICBwYXJbdl0gPSB1OwogICAgc3pbdV0gKz0gc3pbdl07CgogICAgcmV0dXJuIDE7Cn0Kdm9pZCBEaWprc3RyYSgpCnsKICAgIHByaW9yaXR5X3F1ZXVlPHBpaSwgdmVjdG9yPHBpaT4sIGdyZWF0ZXI8cGlpPj4gcTsKICAgIHJlcChpLCBuKQogICAgewogICAgICAgIGlmKGJbaV0pIERbaV0gPSAwLCBxLnB1c2goezAsIGl9KTsKICAgICAgICBlbHNlIERbaV0gPSBJTkY7CiAgICB9CiAgICB3aGlsZShzeihxKSkKICAgIHsKICAgICAgICBwaWkgdG1wID0gcS50b3AoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGludCBkaXN0ID0gdG1wLmZpLCB1ID0gdG1wLnNlOwogICAgICAgIGlmKERbdV0gIT0gZGlzdCkgY29udGludWU7CgogICAgICAgIGZvcihhdXRvICZbdiwgd10gOiBnW3VdKQogICAgICAgICAgICBpZihtaW5pbWl6ZShEW3ZdLCBEW3VdICsgdykpCiAgICAgICAgICAgIHEucHVzaCh7RFt2XSwgdn0pOwogICAgfQp9CgppbnQgdGluW05dLCB0b3V0W05dLCB0aW1lZGZzID0gMDsKaW50IHVwW05dW0xPRyArIDFdLCBtaW5fZWRnZVtOXVtMT0cgKyAxXTsKCnZvaWQgZGZzKGludCB1LCBpbnQgcCA9IDEsIGludCB3ID0gSU5GKQp7CiAgICB0aW5bdV0gPSArK3RpbWVkZnM7CiAgICB1cFt1XVswXSA9IHA7CiAgICBtaW5fZWRnZVt1XVswXSA9IHc7CiAgICBmb3JuKGksIDEsIExPRykKICAgIHsKICAgICAgICB1cFt1XVtpXSA9IHVwW3VwW3VdW2kgLSAxXV1baSAtIDFdOwogICAgICAgIG1pbl9lZGdlW3VdW2ldID0gbWluKG1pbl9lZGdlW3VdW2kgLSAxXSwgbWluX2VkZ2VbdXBbdV1baSAtIDFdXVtpIC0gMV0pOwogICAgfQoKICAgIGZvcihhdXRvICZbdiwgd2VpXSA6IGdbdV0pCiAgICBpZih2ICE9IHApCiAgICB7CiAgICAgICAgZGZzKHYsIHUsIHdlaSk7CiAgICB9CiAgICB0b3V0W3VdID0gKyt0aW1lZGZzOwp9Cgpib29sIGlzX2FuYyhpbnQgdSwgaW50IHYpCnsKICAgIHJldHVybiB0aW5bdV0gPD0gdGluW3ZdICYmIHRvdXRbdl0gPD0gdG91dFt1XTsKfQoKaW50IGdldChpbnQgdSwgaW50IHYpCnsKICAgIGludCByZXMgPSBJTkY7CiAgICBpZihpc19hbmModSwgdikpIHN3YXAodSwgdik7CgogICAgZm9yZChpLCBMT0csIDApIGlmKCFpc19hbmModXBbdV1baV0sIHYpKQogICAgICAgIHJlcyA9IG1pbihyZXMsIG1pbl9lZGdlW3VdW2ldKSwgdSA9IHVwW3VdW2ldOwogICAgaWYoIWlzX2FuYyh1LCB2KSkKICAgICAgICByZXMgPSBtaW4ocmVzLCBtaW5fZWRnZVt1XVswXSksIHUgPSB1cFt1XVswXTsKCiAgICBmb3JkKGksIExPRywgMCkgaWYoIWlzX2FuYyh1cFt2XVtpXSwgdSkpCiAgICAgICAgcmVzID0gbWluKHJlcywgbWluX2VkZ2Vbdl1baV0pLCB2ID0gdXBbdl1baV07CiAgICBpZighaXNfYW5jKHYsIHUpKQogICAgICAgIHJlcyA9IG1pbihyZXMsIG1pbl9lZGdlW3ZdWzBdKTsKICAgIHJldHVybiByZXM7Cn0KCmFycmF5PGludCwgMz4gZVtNXTsKCnZvaWQgc29sdmUoKQp7CiAgICBjaW4gPj4gbiA+PiBtID4+IGsgPj4gcTsKICAgIHJlcChpLCBtKQogICAgewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBnW3VdLnBiKHt2LCB3fSk7CiAgICAgICAgZ1t2XS5wYih7dSwgd30pOwogICAgICAgIGVbaV0gPSB7dywgdSwgdn07CiAgICB9CiAgICByZXAoaSwgaykKICAgIHsKICAgICAgICBpbnQgeDsKICAgICAgICBjaW4gPj4geDsKICAgICAgICBiW3hdID0gMTsKICAgIH0KCiAgICBEaWprc3RyYSgpOwogICAgcmVwKGksIG4pIGdbaV0uY2xlYXIoKTsKCiAgICByZXAoaSwgbSkKICAgICAgICBlW2ldWzBdID0gbWluKERbZVtpXVsxXV0sIERbZVtpXVsyXV0pOwogICAgc29ydChlICsgMSwgZSArIDEgKyBtKTsKICAgIHJlcChpLCBuKSBwYXJbaV0gPSBpLCBzeltpXSA9IDE7CiAgICBmb3JkKGksIG0sIDEpIGlmKHVuaW9uX3NldChlW2ldWzFdLCBlW2ldWzJdKSkKICAgIHsKICAgICAgICBnW2VbaV1bMV1dLnBiKHtlW2ldWzJdLCBlW2ldWzBdfSk7CiAgICAgICAgZ1tlW2ldWzJdXS5wYih7ZVtpXVsxXSwgZVtpXVswXX0pOwogICAgfQogICAgZGZzKDEpOwogICAgcmVwKGksIHEpCiAgICB7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBjb3V0IDw8IGdldCh1LCB2KSA8PCBlbmRsOwogICAgfQp9CgpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgVEMgPSAxOwoKICAgIGlmKGZvcGVuKHRhc2siLmlucCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCi8vICAgIGlmKGZvcGVuKCJub3RlLmlucCIsICJyIikpCi8vICAgIHsKLy8gICAgICAgIGZyZW9wZW4oIm5vdGUuaW5wIiwgInIiLCBzdGRpbik7Ci8vICAgICAgICBmcmVvcGVuKCJub3RlLm91dCIsICJ3Iiwgc3Rkb3V0KTsKLy8gICAgfQoKICAgIHdoaWxlKFRDLS0pCiAgICB7CiAgICAgICAgc29sdmUoKTsKICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K