#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define F first
#define S second
#define emb emplace_back
#define em emplace
const int maxn = 1e5 + 5;
const int inf = 2e9;
vector<pii> adj[maxn];
priority_queue<pii, vector<pii>, greater<pii>> pq;
bool vis[maxn];
int df[maxn], ds[maxn];
int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]){
for(int i=0;i<m;++i){
int u = r[i][0], v = r[i][1], w = l[i];
adj[u].emb(w, v);
adj[v].emb(w, u);
}
fill(df, df+n, inf);
fill(ds, ds+n, inf);
for(int i=0;i<k;++i){
int u = p[i];
pq.em(0, u);
df[u] = 0;
}
while(!pq.empty()){
auto [w, u] = pq.top();
pq.pop();
if(vis[u]) continue;
vis[u] = 1;
if(w != inf){
for(auto [vw, v] : adj[u]){
if(ds[v] > w + vw && !vis[v]){
ds[v] = min(ds[v], w + vw);
if(ds[v] < df[v]) swap(df[v], ds[v]);
pq.em(ds[v], v);
}
}
}
}
return ds[0];
}