// Đạt đz s1 tg
#include <bits/stdc++.h>
#define f first
#define s second
#define mod 1000000007
#define PB push_back
#define PF push_front
#define inf 10000007
#define round(m,n) setprecision((int)m) << fixed << double(n)
#define ll long long
#define int long long
#define bit(x, i) ((x >> i) & 1)
#define pii pair<int, int>
#define TASK "snow"
using namespace std;
void ADD(int &x, int y){
x += y;
if (x >= mod) x -= mod;
if (x < 0) x += mod;
}
int n, m, k, t;
vector<pii> adj[105];
int a[105];
struct gay{
int u, v, w;
} b[100005];
int comp(gay a, gay b){
return a.w < b.w;
}
int r[105];
int get(int x){
if(r[x] == x) return x;
return r[x] = get(r[x]);
}
void join(int x, int y){
int u = get(x), v = get(y);
if(u == v) return;
r[v] = u;
}
int check(int x, int y){
int u = get(x), v = get(y);
return (u == v);
}
void sub1(){
sort(b + 1, b + m + 1, comp);
for(int i = 1; i <= n; i++)
r[i] = i;
int cnt = 0;
for(int i = 1; i <= m; i++){
auto [u, v, w] = b[i];
if(!check(u, v)){
join(u, v);
cnt += w;
}
}
cout << cnt;
}
int w[105][105];
void sub2(){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
if(i == j) continue;
w[i][j] = 1e15;
}
for(int i = 1; i <= m; i++){
auto [u, v, W] = b[i];
w[u][v] = min(W, w[u][v]);
w[v][u] = w[u][v];
}
for(int t = 1; t <= n; t++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
w[i][j] = min(w[i][j], w[i][t] + w[t][j]);
cout << w[a[1]][a[2]];
}
void sub3(){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
if(i == j) continue;
w[i][j] = 1e15;
}
for(int i = 1; i <= m; i++){
auto [u, v, W] = b[i];
w[u][v] = min(W, w[u][v]);
w[v][u] = w[u][v];
}
for(int t = 1; t <= n; t++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
w[i][j] = min(w[i][j], w[i][t] + w[t][j]);
int minn = 1e15;
for(int i = 1; i <= k; i++)
for(int j = 1; j <= k; j++)
for(int z = 1; z <= k; z++)
if(a[i] != a[j] && a[j] != a[z] && a[i] != a[z]){
for(int x = 1; x <= n; x++)
for(int y = 1; y <= n; y++)
minn = min(minn, w[a[i]][x] + w[x][a[j]] + w[a[j]][y] + w[y][a[z]]);
}
for(int x = 1; x <= n; x++){
for(int i = 1; i <= k; i++)
for(int j = 1; j <= k; j++)
for(int z = 1; z <= k; z++)
if(a[i] != a[j] && a[j] != a[z] && a[i] != a[z]){
minn = min(minn, w[a[i]][x] + w[a[j]][x] + w[a[z]][x]);
}
}
cout << minn;
}
int f[105], pick[105];
int TryMST(int mask){
for(int i = 1; i <= n; i++)
r[i] = i;
int cnt = 0;
for(int i = 1; i <= m; i++){
auto [u, v, w] = b[i];
if(pick[u] && !f[u]) continue;
if(pick[v] && !f[v]) continue;
if(!check(u, v)){
join(u, v);
cnt += w;
}
}
return cnt;
}
void sub5(){
sort(b + 1, b + m + 1, comp);
int minn = 1e15;
for(int mask = 0; mask < (1 << k); mask++){
memset(f, 0, sizeof(f));
for(int i = 1; i <= k; i++)
f[a[i]] = bit(mask, i - 1);
minn = min(minn, TryMST(mask));
}
cout << minn;
}
struct gayass{
int cost, u, mask;
};
struct cmp{
bool operator()(const gayass &a, gayass &b){
return a.cost > b.cost;
}
};
int conv[2025];
int W[105][2025];
void sub4(){
for(int i = 1; i <= k; i++) conv[a[i]] = i;
for(int i = 1; i <= n; i++)
for(int j = 0; j <= (1 << k); j++)
W[i][j] = 1e15;
priority_queue<gayass, vector<gayass>, cmp> q;
for(int i = 1; i <= n; i++){
if(pick[i]){
q.push({0, i, (1 << conv[i] - 1)});
W[i][(1 << conv[i] - 1)] = 0;
}
else{
q.push({0, i, 0});
W[i][0] = 0;
}
}
while(!q.empty()){
gayass u = q.top();
// cout << u.u << " " << u.cost << " " << u.mask << '\n';
q.pop();
for(pii v : adj[u.u]){
if(W[v.s][u.mask] > v.f + u.cost){
W[v.s][u.mask] = v.f + u.cost;
q.push({W[v.s][u.mask], v.s, u.mask});
}
if(conv[v.s]){
if(bit(u.mask, conv[v.s] - 1)) continue;
int newmask = u.mask + (1 << conv[v.s] - 1);
if(W[v.s][newmask] > v.f + u.cost){
W[v.s][newmask] = v.f + u.cost;
q.push({W[v.s][newmask], v.s, newmask});
}
}
}
}
int ans = 1e15;
for(int i = 1; i <= n; i++)
// cout << i << " " << W[i][(1 << k) - 1] << '\n';
ans = min(ans, W[i][(1 << k) - 1]);
cout << ans;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if(fopen(TASK".INP", "r")){
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
cin >> n >> k >> m >> t;
for(int i = 1; i <= k; i++){
cin >> a[i];
pick[a[i]]++;
}
for(int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
adj[u].PB({w, v});
adj[v].PB({w, u});
b[i] = {u, v, w};
}
if(t == 1 && k == n) sub1();
else if(t == 1 && k == 2) sub2();
else if(t == 1 && k == 3) sub3();
else if(t == 2) sub5();
else sub4();
}
Ly8gxJDhuqF0IMSReiBzMSB0ZwoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGYgZmlyc3QKI2RlZmluZSBzIHNlY29uZAojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CiNkZWZpbmUgUEIgcHVzaF9iYWNrCiNkZWZpbmUgUEYgcHVzaF9mcm9udAojZGVmaW5lIGluZiAxMDAwMDAwNwojZGVmaW5lIHJvdW5kKG0sbikgc2V0cHJlY2lzaW9uKChpbnQpbSkgPDwgZml4ZWQgPDwgZG91YmxlKG4pCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGJpdCh4LCBpKSAoKHggPj4gaSkgJiAxKQojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIFRBU0sgInNub3ciCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBBREQoaW50ICZ4LCBpbnQgeSl7CiAgICB4ICs9IHk7CiAgICBpZiAoeCA+PSBtb2QpIHggLT0gbW9kOwogICAgaWYgKHggPCAwKSB4ICs9IG1vZDsKfQoKaW50IG4sIG0sIGssIHQ7CnZlY3RvcjxwaWk+IGFkalsxMDVdOwppbnQgYVsxMDVdOwoKc3RydWN0IGdheXsKICAgIGludCB1LCB2LCB3Owp9IGJbMTAwMDA1XTsKCmludCBjb21wKGdheSBhLCBnYXkgYil7CiAgICByZXR1cm4gYS53IDwgYi53Owp9CgppbnQgclsxMDVdOwppbnQgZ2V0KGludCB4KXsKICAgIGlmKHJbeF0gPT0geCkgcmV0dXJuIHg7CiAgICByZXR1cm4gclt4XSA9IGdldChyW3hdKTsKfQp2b2lkIGpvaW4oaW50IHgsIGludCB5KXsKICAgIGludCB1ID0gZ2V0KHgpLCB2ID0gZ2V0KHkpOwogICAgaWYodSA9PSB2KSByZXR1cm47CiAgICByW3ZdID0gdTsKfQppbnQgY2hlY2soaW50IHgsIGludCB5KXsKICAgIGludCB1ID0gZ2V0KHgpLCB2ID0gZ2V0KHkpOwogICAgcmV0dXJuICh1ID09IHYpOwp9Cgp2b2lkIHN1YjEoKXsKICAgIHNvcnQoYiArIDEsIGIgKyBtICsgMSwgY29tcCk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICByW2ldID0gaTsKCiAgICBpbnQgY250ID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICBhdXRvIFt1LCB2LCB3XSA9IGJbaV07CiAgICAgICAgaWYoIWNoZWNrKHUsIHYpKXsKICAgICAgICAgICAgam9pbih1LCB2KTsKICAgICAgICAgICAgY250ICs9IHc7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgY250Owp9CgppbnQgd1sxMDVdWzEwNV07CnZvaWQgc3ViMigpewogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICBmb3IoaW50IGogPSAxOyBqIDw9IG47IGorKyl7CiAgICAgICAgaWYoaSA9PSBqKSBjb250aW51ZTsKICAgICAgICB3W2ldW2pdID0gMWUxNTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICBhdXRvIFt1LCB2LCBXXSA9IGJbaV07CiAgICAgICAgd1t1XVt2XSA9IG1pbihXLCB3W3VdW3ZdKTsKICAgICAgICB3W3ZdW3VdID0gd1t1XVt2XTsKICAgIH0KICAgIGZvcihpbnQgdCA9IDE7IHQgPD0gbjsgdCsrKQogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICBmb3IoaW50IGogPSAxOyBqIDw9IG47IGorKykKICAgIHdbaV1bal0gPSBtaW4od1tpXVtqXSwgd1tpXVt0XSArIHdbdF1bal0pOwoKICAgIGNvdXQgPDwgd1thWzFdXVthWzJdXTsKfQoKdm9pZCBzdWIzKCl7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIGZvcihpbnQgaiA9IDE7IGogPD0gbjsgaisrKXsKICAgICAgICBpZihpID09IGopIGNvbnRpbnVlOwogICAgICAgIHdbaV1bal0gPSAxZTE1OwogICAgfQogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspewogICAgICAgIGF1dG8gW3UsIHYsIFddID0gYltpXTsKICAgICAgICB3W3VdW3ZdID0gbWluKFcsIHdbdV1bdl0pOwogICAgICAgIHdbdl1bdV0gPSB3W3VdW3ZdOwogICAgfQogICAgZm9yKGludCB0ID0gMTsgdCA8PSBuOyB0KyspCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIGZvcihpbnQgaiA9IDE7IGogPD0gbjsgaisrKQogICAgd1tpXVtqXSA9IG1pbih3W2ldW2pdLCB3W2ldW3RdICsgd1t0XVtqXSk7CgogICAgaW50IG1pbm4gPSAxZTE1OwogICAgZm9yKGludCBpID0gMTsgaSA8PSBrOyBpKyspCiAgICBmb3IoaW50IGogPSAxOyBqIDw9IGs7IGorKykKICAgIGZvcihpbnQgeiA9IDE7IHogPD0gazsgeisrKQogICAgaWYoYVtpXSAhPSBhW2pdICYmIGFbal0gIT0gYVt6XSAmJiBhW2ldICE9IGFbel0pewogICAgICAgIGZvcihpbnQgeCA9IDE7IHggPD0gbjsgeCsrKQogICAgICAgIGZvcihpbnQgeSA9IDE7IHkgPD0gbjsgeSsrKQogICAgICAgIG1pbm4gPSBtaW4obWlubiwgd1thW2ldXVt4XSArIHdbeF1bYVtqXV0gKyB3W2Fbal1dW3ldICsgd1t5XVthW3pdXSk7CiAgICB9CgogICAgZm9yKGludCB4ID0gMTsgeCA8PSBuOyB4KyspewogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gazsgaSsrKQogICAgICAgIGZvcihpbnQgaiA9IDE7IGogPD0gazsgaisrKQogICAgICAgIGZvcihpbnQgeiA9IDE7IHogPD0gazsgeisrKQogICAgICAgIGlmKGFbaV0gIT0gYVtqXSAmJiBhW2pdICE9IGFbel0gJiYgYVtpXSAhPSBhW3pdKXsKICAgICAgICAgICAgbWlubiA9IG1pbihtaW5uLCB3W2FbaV1dW3hdICsgd1thW2pdXVt4XSArIHdbYVt6XV1beF0pOwogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8IG1pbm47Cn0KCmludCBmWzEwNV0sIHBpY2tbMTA1XTsKCmludCBUcnlNU1QoaW50IG1hc2spewogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgcltpXSA9IGk7CgogICAgaW50IGNudCA9IDA7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKyl7CiAgICAgICAgYXV0byBbdSwgdiwgd10gPSBiW2ldOwogICAgICAgIGlmKHBpY2tbdV0gJiYgIWZbdV0pIGNvbnRpbnVlOwogICAgICAgIGlmKHBpY2tbdl0gJiYgIWZbdl0pIGNvbnRpbnVlOwogICAgICAgIGlmKCFjaGVjayh1LCB2KSl7CiAgICAgICAgICAgIGpvaW4odSwgdik7CiAgICAgICAgICAgIGNudCArPSB3OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gY250Owp9Cgp2b2lkIHN1YjUoKXsKICAgIHNvcnQoYiArIDEsIGIgKyBtICsgMSwgY29tcCk7CiAgICBpbnQgbWlubiA9IDFlMTU7CiAgICBmb3IoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgayk7IG1hc2srKyl7CiAgICAgICAgbWVtc2V0KGYsIDAsIHNpemVvZihmKSk7CiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBrOyBpKyspCiAgICAgICAgZlthW2ldXSA9IGJpdChtYXNrLCBpIC0gMSk7CiAgICAgICAgbWlubiA9IG1pbihtaW5uLCBUcnlNU1QobWFzaykpOwogICAgfQogICAgY291dCA8PCBtaW5uOwp9CgpzdHJ1Y3QgZ2F5YXNzewogICAgaW50IGNvc3QsIHUsIG1hc2s7Cn07CgpzdHJ1Y3QgY21wewogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IGdheWFzcyAmYSwgZ2F5YXNzICZiKXsKICAgICAgICAgICAgcmV0dXJuIGEuY29zdCA+IGIuY29zdDsKICAgIH0KfTsKCmludCBjb252WzIwMjVdOwppbnQgV1sxMDVdWzIwMjVdOwoKdm9pZCBzdWI0KCl7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IGs7IGkrKykgY29udlthW2ldXSA9IGk7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICBmb3IoaW50IGogPSAwOyBqIDw9ICgxIDw8IGspOyBqKyspCiAgICAgICAgV1tpXVtqXSA9IDFlMTU7CgogICAgcHJpb3JpdHlfcXVldWU8Z2F5YXNzLCB2ZWN0b3I8Z2F5YXNzPiwgY21wPiBxOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGlmKHBpY2tbaV0pewogICAgICAgICAgICBxLnB1c2goezAsIGksICgxIDw8IGNvbnZbaV0gLSAxKX0pOwogICAgICAgICAgICBXW2ldWygxIDw8IGNvbnZbaV0gLSAxKV0gPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBxLnB1c2goezAsIGksIDB9KTsKICAgICAgICAgICAgV1tpXVswXSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgIGdheWFzcyB1ID0gcS50b3AoKTsKLy8gICAgICAgIGNvdXQgPDwgdS51IDw8ICIgIiA8PCB1LmNvc3QgPDwgIiAiIDw8IHUubWFzayA8PCAnXG4nOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yKHBpaSB2IDogYWRqW3UudV0pewogICAgICAgICAgICBpZihXW3Yuc11bdS5tYXNrXSA+IHYuZiArIHUuY29zdCl7CiAgICAgICAgICAgICAgICBXW3Yuc11bdS5tYXNrXSA9IHYuZiArIHUuY29zdDsKICAgICAgICAgICAgICAgIHEucHVzaCh7V1t2LnNdW3UubWFza10sIHYucywgdS5tYXNrfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoY29udlt2LnNdKXsKICAgICAgICAgICAgICAgIGlmKGJpdCh1Lm1hc2ssIGNvbnZbdi5zXSAtIDEpKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGludCBuZXdtYXNrID0gdS5tYXNrICsgKDEgPDwgY29udlt2LnNdIC0gMSk7CiAgICAgICAgICAgICAgICBpZihXW3Yuc11bbmV3bWFza10gPiB2LmYgKyB1LmNvc3QpewogICAgICAgICAgICAgICAgICAgIFdbdi5zXVtuZXdtYXNrXSA9IHYuZiArIHUuY29zdDsKICAgICAgICAgICAgICAgICAgICBxLnB1c2goe1dbdi5zXVtuZXdtYXNrXSwgdi5zLCBuZXdtYXNrfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaW50IGFucyA9IDFlMTU7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKLy8gICAgICAgIGNvdXQgPDwgaSA8PCAiICIgPDwgV1tpXVsoMSA8PCBrKSAtIDFdIDw8ICdcbic7CiAgICBhbnMgPSBtaW4oYW5zLCBXW2ldWygxIDw8IGspIC0gMV0pOwoKICAgIGNvdXQgPDwgYW5zOwp9CgpzaWduZWQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgIGlmKGZvcGVuKFRBU0siLklOUCIsICJyIikpewogICAgICAgIGZyZW9wZW4oVEFTSyIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihUQVNLIi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gayA+PiBtID4+IHQ7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IGs7IGkrKyl7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgcGlja1thW2ldXSsrOwogICAgfQogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBhZGpbdV0uUEIoe3csIHZ9KTsKICAgICAgICBhZGpbdl0uUEIoe3csIHV9KTsKICAgICAgICBiW2ldID0ge3UsIHYsIHd9OwogICAgfQoKICAgIGlmKHQgPT0gMSAmJiBrID09IG4pIHN1YjEoKTsKICAgIGVsc2UgaWYodCA9PSAxICYmIGsgPT0gMikgc3ViMigpOwogICAgZWxzZSBpZih0ID09IDEgJiYgayA9PSAzKSBzdWIzKCk7CiAgICBlbHNlIGlmKHQgPT0gMikgc3ViNSgpOwogICAgZWxzZSBzdWI0KCk7Cn0K