#include <bits/stdc++.h>
#define all(dataStructure) dataStructure.begin(),dataStructure.end()
#define ll long long
using namespace std;
namespace std {
template <typename T, int D>
struct _vector : public vector <_vector <T, D - 1>> {
static_assert(D >= 1, "Dimension must be positive!");
template <typename... Args>
_vector(int n = 0, Args... args) : vector <_vector <T, D - 1>> (n, _vector <T, D - 1> (args...)) {}
};
// _vector <int, 3> a(n, m, k);: int a[n][m][k].
// _vector <int, 3> a(n, m, k, x);: int a[n][m][k] initialized with x.
template <typename T>
struct _vector <T, 1> : public vector <T> {
_vector(int n = 0, const T& val = T()) : vector <T> (n, val) {}
};
}
const int MAX = 1e5 + 3;
const ll MOD[] = {1000000007, 998244353};
int n, m, k, q;
ll dp[MAX];
ll ans[MAX], L[MAX], R[MAX];
vector <pair <int, int>> adj[MAX];
priority_queue <pair <ll, int>> pq;
int u[MAX], v[MAX];
void dijkstra() {
while (pq.size()) {
auto [D, u] = pq.top();
pq.pop();
D = -D;
if (D != dp[u]) continue;
for (auto &[v, c] : adj[u]) {
if (dp[v] > dp[u] + c) {
dp[v] = dp[u] + c;
pq.emplace(-dp[v], v);
}
}
}
}
vector <ll> disDist;
vector <pair <int, int>> edges[MAX];
vector <int> queriesAt[MAX];
int pa[MAX];
int findpa(int u) {
return u == pa[u] ? u : pa[u] = findpa(pa[u]);
}
void join(int u, int v) {
u = findpa(u);
v = findpa(v);
pa[v] = u;
}
template <typename dataType>
inline void compress(vector <dataType> &x) {
sort(all(x));
x.erase(unique(all(x)), x.end());
}
void init() {
for (int u = 1; u <= n; u++) disDist.push_back(dp[u]);
compress(disDist);
for (int i = 0; i < q; i++) {
L[i] = 0, R[i] = (int)disDist.size() - 1;
}
for (int u = 1; u <= n; u++) {
for (auto &[v, c] : adj[u]) if (u < v) {
int id = lower_bound(all(disDist), min(dp[u], dp[v])) - disDist.begin();
edges[id].emplace_back(u, v);
}
}
}
void Solve() {
cin >> n >> m >> k >> q;
memset(dp, 0x0f, sizeof dp);
for (int i = 0; i < m; i++) {
int u, v, c;
cin >> u >> v >> c;
adj[u].emplace_back(v, c);
adj[v].emplace_back(u, c);
}
for (int i = 0; i < k; i++) {
int x;
cin >> x;
dp[x] = 0;
pq.emplace(0ll, x);
}
dijkstra();
init();
for (int i = 0; i < q; i++) {
cin >> u[i] >> v[i];
}
int itorateTime = 18;
while (itorateTime--) {
iota(pa + 1, pa + n + 1, 1);
for (int i = 0; i < q; i++) {
if (L[i] <= R[i]) {
queriesAt[(L[i] + R[i]) / 2].push_back(i);
}
}
for (int i = (int)disDist.size() - 1; i >= 0; i--) {
for (auto &[u, v] : edges[i]) join(u, v);
for (int &j : queriesAt[i]) {
if (findpa(u[j]) == findpa(v[j])) {
ans[j] = disDist[i];
L[j] = i + 1;
} else {
R[j] = i - 1;
}
}
queriesAt[i].clear();
}
}
for (int i = 0; i < q; i++) cout << ans[i] << '\n';
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
#define TASK "WALK"
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
/* int TEST = 1; cin >> TEST; while (TEST--) */ Solve();
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << "s\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgYWxsKGRhdGFTdHJ1Y3R1cmUpIGRhdGFTdHJ1Y3R1cmUuYmVnaW4oKSxkYXRhU3RydWN0dXJlLmVuZCgpCiNkZWZpbmUgbGwgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpuYW1lc3BhY2Ugc3RkIHsKICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEQ+CiAgICAgICAgc3RydWN0IF92ZWN0b3IgOiBwdWJsaWMgdmVjdG9yIDxfdmVjdG9yIDxULCBEIC0gMT4+IHsKICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoRCA+PSAxLCAiRGltZW5zaW9uIG11c3QgYmUgcG9zaXRpdmUhIik7CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgICAgICAgIF92ZWN0b3IoaW50IG4gPSAwLCBBcmdzLi4uIGFyZ3MpIDogdmVjdG9yIDxfdmVjdG9yIDxULCBEIC0gMT4+IChuLCBfdmVjdG9yIDxULCBEIC0gMT4gKGFyZ3MuLi4pKSB7fQogICAgICAgIH07CiAgICAgICAgLy8gX3ZlY3RvciA8aW50LCAzPiBhKG4sIG0sIGspOzogaW50IGFbbl1bbV1ba10uCiAgICAgICAgLy8gX3ZlY3RvciA8aW50LCAzPiBhKG4sIG0sIGssIHgpOzogaW50IGFbbl1bbV1ba10gaW5pdGlhbGl6ZWQgd2l0aCB4LgogICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgICAgIHN0cnVjdCBfdmVjdG9yIDxULCAxPiA6IHB1YmxpYyB2ZWN0b3IgPFQ+IHsKICAgICAgICAgICAgICAgIF92ZWN0b3IoaW50IG4gPSAwLCBjb25zdCBUJiB2YWwgPSBUKCkpIDogdmVjdG9yIDxUPiAobiwgdmFsKSB7fQogICAgICAgIH07Cn0KCmNvbnN0IGludCBNQVggPSAxZTUgKyAzOwpjb25zdCBsbCBNT0RbXSA9IHsxMDAwMDAwMDA3LCA5OTgyNDQzNTN9OwoKaW50IG4sIG0sIGssIHE7CmxsIGRwW01BWF07CmxsIGFuc1tNQVhdLCBMW01BWF0sIFJbTUFYXTsKdmVjdG9yIDxwYWlyIDxpbnQsIGludD4+IGFkaltNQVhdOwpwcmlvcml0eV9xdWV1ZSA8cGFpciA8bGwsIGludD4+IHBxOwppbnQgdVtNQVhdLCB2W01BWF07Cgp2b2lkIGRpamtzdHJhKCkgewogICAgICAgIHdoaWxlIChwcS5zaXplKCkpIHsKICAgICAgICAgICAgICAgIGF1dG8gW0QsIHVdID0gcHEudG9wKCk7CiAgICAgICAgICAgICAgICBwcS5wb3AoKTsKICAgICAgICAgICAgICAgIEQgPSAtRDsKICAgICAgICAgICAgICAgIGlmIChEICE9IGRwW3VdKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGZvciAoYXV0byAmW3YsIGNdIDogYWRqW3VdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcFt2XSA+IGRwW3VdICsgYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwW3ZdID0gZHBbdV0gKyBjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBxLmVtcGxhY2UoLWRwW3ZdLCB2KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKdmVjdG9yIDxsbD4gZGlzRGlzdDsKdmVjdG9yIDxwYWlyIDxpbnQsIGludD4+IGVkZ2VzW01BWF07CnZlY3RvciA8aW50PiBxdWVyaWVzQXRbTUFYXTsKaW50IHBhW01BWF07CgppbnQgZmluZHBhKGludCB1KSB7CiAgICAgICAgcmV0dXJuIHUgPT0gcGFbdV0gPyB1IDogcGFbdV0gPSBmaW5kcGEocGFbdV0pOwp9Cgp2b2lkIGpvaW4oaW50IHUsIGludCB2KSB7CiAgICAgICAgdSA9IGZpbmRwYSh1KTsKICAgICAgICB2ID0gZmluZHBhKHYpOwogICAgICAgIHBhW3ZdID0gdTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIGRhdGFUeXBlPgppbmxpbmUgdm9pZCBjb21wcmVzcyh2ZWN0b3IgPGRhdGFUeXBlPiAmeCkgewogICAgICAgIHNvcnQoYWxsKHgpKTsKICAgICAgICB4LmVyYXNlKHVuaXF1ZShhbGwoeCkpLCB4LmVuZCgpKTsKfQoKdm9pZCBpbml0KCkgewogICAgICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgZGlzRGlzdC5wdXNoX2JhY2soZHBbdV0pOwogICAgICAgIGNvbXByZXNzKGRpc0Rpc3QpOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgewogICAgICAgICAgICAgICAgTFtpXSA9IDAsIFJbaV0gPSAoaW50KWRpc0Rpc3Quc2l6ZSgpIC0gMTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgewogICAgICAgICAgICAgICAgZm9yIChhdXRvICZbdiwgY10gOiBhZGpbdV0pIGlmICh1IDwgdikgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBsb3dlcl9ib3VuZChhbGwoZGlzRGlzdCksIG1pbihkcFt1XSwgZHBbdl0pKSAtIGRpc0Rpc3QuYmVnaW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWRnZXNbaWRdLmVtcGxhY2VfYmFjayh1LCB2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgU29sdmUoKSB7CiAgICAgICAgY2luID4+IG4gPj4gbSA+PiBrID4+IHE7CiAgICAgICAgbWVtc2V0KGRwLCAweDBmLCBzaXplb2YgZHApOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICAgICAgaW50IHUsIHYsIGM7CiAgICAgICAgICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IGM7CiAgICAgICAgICAgICAgICBhZGpbdV0uZW1wbGFjZV9iYWNrKHYsIGMpOwogICAgICAgICAgICAgICAgYWRqW3ZdLmVtcGxhY2VfYmFjayh1LCBjKTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgaSsrKSB7CiAgICAgICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICAgICAgZHBbeF0gPSAwOwogICAgICAgICAgICAgICAgcHEuZW1wbGFjZSgwbGwsIHgpOwogICAgICAgIH0KCiAgICAgICAgZGlqa3N0cmEoKTsKICAgICAgICBpbml0KCk7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSB7CiAgICAgICAgICAgICAgICBjaW4gPj4gdVtpXSA+PiB2W2ldOwogICAgICAgIH0KCgogICAgICAgIGludCBpdG9yYXRlVGltZSA9IDE4OwogICAgICAgIHdoaWxlIChpdG9yYXRlVGltZS0tKSB7CiAgICAgICAgICAgICAgICBpb3RhKHBhICsgMSwgcGEgKyBuICsgMSwgMSk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTFtpXSA8PSBSW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcmllc0F0WyhMW2ldICsgUltpXSkgLyAyXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAoaW50KWRpc0Rpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvICZbdSwgdl0gOiBlZGdlc1tpXSkgam9pbih1LCB2KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgJmogOiBxdWVyaWVzQXRbaV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluZHBhKHVbal0pID09IGZpbmRwYSh2W2pdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zW2pdID0gZGlzRGlzdFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExbal0gPSBpICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUltqXSA9IGkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBxdWVyaWVzQXRbaV0uY2xlYXIoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSBjb3V0IDw8IGFuc1tpXSA8PCAnXG4nOwp9CgppbnQzMl90IG1haW4oKSB7CiAgICAgICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgICAgICBjaW4udGllKDApOwoKICAgICAgICAjZGVmaW5lIFRBU0sgIldBTEsiCiAgICAgICAgaWYgKGZvcGVuKFRBU0siLklOUCIsICJyIikpIHsKICAgICAgICAgICAgICAgIGZyZW9wZW4oVEFTSyIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgICAgICAgICBmcmVvcGVuKFRBU0siLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgICAgICB9CgogICAgICAgIC8qIGludCBURVNUID0gMTsgY2luID4+IFRFU1Q7IHdoaWxlIChURVNULS0pICovIFNvbHZlKCk7CgogICAgICAgIGNlcnIgPDwgIlxuVGltZSBlbGFwc2VkOiAiIDw8IDEuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAic1xuIjsKICAgICAgICByZXR1cm4gMDsKfQo=