| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1236516 | punjabilassi03 | Crocodile's Underground City (IOI11_crocodile) | C++20 | 0 ms | 0 KiB | 
#include <bits/stdc++.h>
#include <cctype>
using namespace std;
#define int long long
#define vi vector<int>
#define vll vector<long long>
#define vpii vector<pair<int, int>>
#define vvi vector<vector<int>>
#define pii pair<int, int>
#define pb push_back
#define ppb pop_back
#define repi(a,b,c) for(int i=a;i<=b;i+=c)
#define repk(a,b,c) for(int k=a;k<=b;k+=c)
#define repj(a,b,c) for(int j=a;j<=b;j+=c)
#define repm(a,b,c) for(int m=a;m<=b;m+=c)
#define rrepi(a,b,c) for(int i=a;i>=b;i-=c)
#define rrepj(a,b,c) for(int j=a;j>=b;j-=c)
#define rrepk(a,b,c) for(int k=a;k>=b;k-=c)
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
#define sp(x) fixed<<setprecision(x)
#define yes_out {cout<<"YES\n"; return;} 
#define no_out {cout<<"NO\n"; return;}  
#define vin(v) for(auto&x:v)cin>>x;
#define print(v) for(auto x:v) cout<<x<<" "; cout<<"\n";
const int N = 100005;
vpii g[N];
int n,m,k,d[N][2];
void solve(){
    cin >> n >> m >> k;
    repi(1,m,1){
        int u,v,c;
        cin >> u >> v >> c;
        u++;v++;
        g[u].pb({v,c});
        g[v].pb({u,c});
    }
    fill(&d[0][0],&d[0][0]+(n+1)*2,INT_MAX);
    priority_queue<pii,vpii,greater<pii>> pq;
    repi(1,k,1){
        int x;
        cin >> x;
        x++;
        pq.push({0,x});
        d[x][0]=0;
    }
    while(!pq.empty()){
        int u=pq.top().second;
        int dist=pq.top().first;
        pq.pop();
        if(d[u][1]<dist) continue;
        for(auto neighbour:g[u]){
            int v=neighbour.first;
            int w=neighbour.second;
            int newdist=dist+w;
            if(d[v][0]>newdist){
                d[v][1]=d[v][0];
                d[v][0]=newdist;
                pq.push({d[v][1],v});
            }
            else if(newdist>d[v][0]&&newdist<d[v][1]){
                d[v][1]=newdist;
                pq.push({newdist,v});
            }
        }
    }
    cout << d[1][1];
}
   
int32_t main(){
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout); 
    #endif
 
    std::ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    int t = 1; 
    //cin >> t;
    while (t--) solve();
    return 0;
}
