// ROOT : DRAGON3012009 : WA in Real Life
#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 1111
#define Bit(i) (1LL << i )
#define INF (1ll<<60)
#define NAME "file"
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;
ll n, m, q, k, type ;
ll a[MAXN] ;
ll d[MAXN / 10 ][1 << 10 ] ;
ll lab[MAXN ] ;
vector<pair<ll,ll>> adj[MAXN ] ;
vector<ll> spec ;
struct Edge {
ll u, v, w ;
bool operator < (const Edge & other ) const {
return w < other.w ;
}
} edge[MAXN ] ;
ll find_set(ll a ) {
return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
}
struct Data {
ll u, mask, w ;
bool operator < (const Data & other )const {
return w > other.w ;
}
};
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 ;
}
void init() {
cin >> n >> k >> m >> type ;
FOR(i, 1, k ) {
ll x ;
cin >> x ;
spec.push_back(x) ;
}
FOR(i, 1, m ) {
ll x, y, w ;
cin >> x >> y >> w ;
edge[i] = {x, y, w } ;
adj[x].push_back({y, w }) ;
adj[y].push_back({x, w }) ;
}
}
void solve() {
sort(edge + 1, edge + m + 1 ) ;
memset(lab, -1, sizeof lab ) ;
ll ans = INF ;
if(k == n && type == 1 ) {
ll mst = 0 ;
FOR(i, 1, m ) {
if(union_set(edge[i].u, edge[i].v )) mst += edge[i].w ;
}
cout << mst << el ;
return ;
}
if(type == 1 ) {
FOR(i, 0, n ) REP(mask, 1 << k ) d[i][mask] = INF ;
REP(i, k ) d[spec[i]][1 << i ] = 0 ;
REP(mask, 1 << k ) {
if(mask == 0 ) continue ;
FOR(i, 1, n ) {
for(ll sub_mask = mask ; sub_mask ; sub_mask = mask & (sub_mask - 1 )) d[i][mask] = min(d[i][mask], d[i][sub_mask] + d[i][sub_mask ^ mask ]) ;
}
priority_queue<Data > pq ;
FOR(i, 1, n ) if(d[i][mask] != INF ) pq.push({i, mask, d[i][mask] }) ;
while(!pq.empty() ) {
Data u = pq.top() ;
pq.pop() ;
if(d[u.u][u.mask ] < u.w ) continue ;
for(pair<ll,ll> v : adj[u.u] ) if(d[v.fi][u.mask] > u.w + v.se ) pq.push({v.fi, u.mask, d[v.fi][u.mask] = u.w + v.se }) ;
}
}
FOR(i, 1, n ) ans = min(ans, d[i][(1 << k ) - 1 ]) ;
cout << ans << el ;
} else {
vector<ll> in_mst(n + 10, 1 ) ;
ll cnt_active = n ;
for(ll v : spec ) in_mst[v] = false, cnt_active -- ;
REP(mask, 1 << k ) {
REP(i, k ) if(mask >> i & 1 ) in_mst[spec[i]] = true, cnt_active ++ ;
FOR(i, 1, n ) lab[i] = -1 ;
ll cc = 0, mst = 0 ;
FOR(i, 1, m ) if(in_mst[edge[i].u] && in_mst[edge[i].v] && union_set(edge[i].u, edge[i].v ) ) {
cc ++ ;
mst += edge[i].w ;
}
if(cnt_active - 1 == cc ) ans = min(ans, mst ) ;
REP(i, k ) if(mask >> i & 1 ) in_mst[spec[i]] = false, cnt_active -- ;
}
cout << ans << 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);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkgOiBXQSBpbiBSZWFsIExpZmUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBfUk9PVF8gaW50IG1haW4oKQojZGVmaW5lIE0gMTAwMDAwMDAwNwojZGVmaW5lIE1BWE4gMTExMQojZGVmaW5lIEJpdChpKSAoMUxMIDw8IGkgKQojZGVmaW5lIElORiAoMWxsPDw2MCkKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGRlYnVnKGEpIGNvdXQgPDwgI2EgPDwgIiA9ICIgPDwgYSA8PCBlbmRsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbGwgbiwgbSwgcSwgaywgdHlwZSA7CmxsIGFbTUFYTl0gOwpsbCBkW01BWE4gLyAxMCBdWzEgPDwgMTAgXSA7CmxsIGxhYltNQVhOIF0gOwp2ZWN0b3I8cGFpcjxsbCxsbD4+IGFkaltNQVhOIF0gOwp2ZWN0b3I8bGw+IHNwZWMgOwoKCnN0cnVjdCBFZGdlIHsKICAgIGxsIHUsIHYsIHcgOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBFZGdlICYgb3RoZXIgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHcgPCBvdGhlci53IDsKICAgIH0KfSBlZGdlW01BWE4gXSA7CgpsbCBmaW5kX3NldChsbCBhICkgewogICAgcmV0dXJuIGxhYlthXSA8IDAgPyBhIDogbGFiW2FdID0gZmluZF9zZXQobGFiW2FdKSA7Cn0KCnN0cnVjdCBEYXRhIHsKICAgIGxsIHUsIG1hc2ssIHcgOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBEYXRhICYgb3RoZXIgKWNvbnN0IHsKICAgICAgICByZXR1cm4gdyA+IG90aGVyLncgOwogICAgfQp9OwoKYm9vbCB1bmlvbl9zZXQobGwgYSwgbGwgYiApIHsKICAgIGEgPSBmaW5kX3NldChhKSA7CiAgICBiID0gZmluZF9zZXQoYikgOwogICAgaWYoYSA9PSBiICkgcmV0dXJuIGZhbHNlIDsKICAgIGlmKGxhYlthXSA+IGxhYltiXSkgc3dhcChhLCBiICkgOwogICAgbGFiW2FdICs9IGxhYltiXSA7CiAgICBsYWJbYl0gPSBhIDsKICAgIHJldHVybiB0cnVlIDsKfQoKdm9pZCBpbml0KCkgewogICAgY2luID4+IG4gPj4gayA+PiBtID4+IHR5cGUgIDsKICAgIEZPUihpLCAxLCBrICkgewogICAgICAgIGxsIHggOwogICAgICAgIGNpbiA+PiB4IDsKICAgICAgICBzcGVjLnB1c2hfYmFjayh4KSA7CiAgICB9CiAgICBGT1IoaSwgMSwgbSApIHsKICAgICAgICBsbCB4LCB5LCB3IDsKICAgICAgICBjaW4gPj4geCA+PiB5ID4+IHcgOwogICAgICAgIGVkZ2VbaV0gPSB7eCwgeSwgdyB9IDsKICAgICAgICBhZGpbeF0ucHVzaF9iYWNrKHt5LCB3IH0pIDsKICAgICAgICBhZGpbeV0ucHVzaF9iYWNrKHt4LCB3IH0pIDsKICAgIH0KfQoKdm9pZCBzb2x2ZSgpIHsKICAgIHNvcnQoZWRnZSArIDEsIGVkZ2UgKyBtICsgMSApIDsKICAgIG1lbXNldChsYWIsIC0xLCBzaXplb2YgbGFiICkgOwogICAgbGwgYW5zID0gSU5GIDsKICAgIGlmKGsgPT0gbiAmJiB0eXBlID09IDEgKSB7CiAgICAgICAgbGwgbXN0ID0gMCA7CiAgICAgICAgRk9SKGksIDEsIG0gKSB7CiAgICAgICAgICAgIGlmKHVuaW9uX3NldChlZGdlW2ldLnUsIGVkZ2VbaV0udiApKSBtc3QgKz0gZWRnZVtpXS53IDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBtc3QgPDwgZWwgOwogICAgICAgIHJldHVybiA7CiAgICB9CiAgICBpZih0eXBlID09IDEgKSB7CiAgICAgICAgRk9SKGksIDAsIG4gKSBSRVAobWFzaywgMSA8PCBrICkgZFtpXVttYXNrXSA9IElORiA7CiAgICAgICAgUkVQKGksIGsgKSBkW3NwZWNbaV1dWzEgPDwgaSBdID0gMCA7CiAgICAgICAgUkVQKG1hc2ssIDEgPDwgayApIHsKICAgICAgICAgICAgaWYobWFzayA9PSAwICkgY29udGludWUgOwoKICAgICAgICAgICAgRk9SKGksIDEsIG4gICkgewogICAgICAgICAgICAgICAgZm9yKGxsIHN1Yl9tYXNrID0gbWFzayA7IHN1Yl9tYXNrIDsgc3ViX21hc2sgPSBtYXNrICYgKHN1Yl9tYXNrIC0gMSApKSBkW2ldW21hc2tdID0gbWluKGRbaV1bbWFza10sIGRbaV1bc3ViX21hc2tdICsgZFtpXVtzdWJfbWFzayBeIG1hc2sgXSkgOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcmlvcml0eV9xdWV1ZTxEYXRhID4gcHEgOwogICAgICAgICAgICBGT1IoaSwgMSwgbiApIGlmKGRbaV1bbWFza10gIT0gSU5GICkgcHEucHVzaCh7aSwgbWFzaywgZFtpXVttYXNrXSB9KSA7CiAgICAgICAgICAgIHdoaWxlKCFwcS5lbXB0eSgpICkgewogICAgICAgICAgICAgICAgRGF0YSB1ID0gcHEudG9wKCkgOwogICAgICAgICAgICAgICAgcHEucG9wKCkgOwogICAgICAgICAgICAgICAgaWYoZFt1LnVdW3UubWFzayBdIDwgdS53ICkgY29udGludWUgOwogICAgICAgICAgICAgICAgZm9yKHBhaXI8bGwsbGw+IHYgOiBhZGpbdS51XSApIGlmKGRbdi5maV1bdS5tYXNrXSA+IHUudyArIHYuc2UgKSBwcS5wdXNoKHt2LmZpLCB1Lm1hc2ssIGRbdi5maV1bdS5tYXNrXSA9IHUudyArIHYuc2UgfSkgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIEZPUihpLCAxLCBuICkgYW5zID0gbWluKGFucywgZFtpXVsoMSA8PCBrICkgLSAxIF0pIDsKICAgICAgICBjb3V0IDw8IGFucyA8PCBlbCA7CiAgICB9IGVsc2UgewogICAgICAgIHZlY3RvcjxsbD4gaW5fbXN0KG4gKyAxMCwgMSApIDsKICAgICAgICBsbCBjbnRfYWN0aXZlID0gbiA7CiAgICAgICAgZm9yKGxsIHYgOiBzcGVjICkgaW5fbXN0W3ZdID0gZmFsc2UsIGNudF9hY3RpdmUgLS0gIDsKICAgICAgICBSRVAobWFzaywgMSA8PCBrICkgewogICAgICAgICAgICBSRVAoaSwgayApIGlmKG1hc2sgPj4gaSAmIDEgKSBpbl9tc3Rbc3BlY1tpXV0gPSB0cnVlLCBjbnRfYWN0aXZlICsrICA7CiAgICAgICAgICAgIEZPUihpLCAxLCBuICkgbGFiW2ldID0gLTEgOwogICAgICAgICAgICBsbCBjYyA9IDAsIG1zdCA9IDAgOwogICAgICAgICAgICBGT1IoaSwgMSwgbSApIGlmKGluX21zdFtlZGdlW2ldLnVdICYmIGluX21zdFtlZGdlW2ldLnZdICYmIHVuaW9uX3NldChlZGdlW2ldLnUsIGVkZ2VbaV0udiApICkgewogICAgICAgICAgICAgICAgY2MgKysgOwogICAgICAgICAgICAgICAgbXN0ICs9IGVkZ2VbaV0udyA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoY250X2FjdGl2ZSAtIDEgPT0gY2MgKSBhbnMgPSBtaW4oYW5zLCBtc3QgKSA7CgogICAgICAgICAgICBSRVAoaSwgayApIGlmKG1hc2sgPj4gaSAmIDEgKSBpbl9tc3Rbc3BlY1tpXV0gPSBmYWxzZSwgY250X2FjdGl2ZSAtLSA7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zIDw8IGVsIDsKICAgIH0KfQoKCl9ST09UXyB7Ci8vICAgIGZyZW9wZW4oTkFNRSIuaW5wIiwgInIiLCBzdGRpbik7Ci8vICAgIGZyZW9wZW4oTkFNRSIub3V0IiwgInciLCBzdGRvdXQpIDsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7IC8vIGNpbiA+PiB0IDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuICgwJjApOwp9Cg==