#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, int>;
const ll inf = 2e+18;
ll travel_plan(int n, int m, int r[][2], int l[], int k, int p[])
{
vector<pair<int, int>> adj[n];
for (int i = 0; i < m; i++)
adj[r[i][0]].push_back({r[i][1], l[i]}), adj[r[i][1]].push_back({r[i][0], l[i]});
vector<vector<ll>> d(n, vector<ll>(2, inf));
priority_queue<pii, vector<pii>, greater<pii>> pq;
for (int i = 0; i < k; i++)
pq.push({0, p[i]}), d[p[i]][1] = d[p[i]][0] = 0;
while (!pq.empty())
{
auto t = pq.top();
pq.pop();
ll dd = t.first, cur = t.second;
if (d[cur][1] < dd)
continue;
for (auto u : adj[cur])
{
ll to = u.first, w = u.second, v = dd + w;
if (v < d[to][0])
{
d[to][1] = d[to][0], d[to][0] = v;
if (d[to][1] != inf)
pq.push({d[to][1], to});
}
else if (v < d[to][1])
{
d[to][1] = v;
pq.push({d[to][1], to});
}
}
}
return d[0][1];
}