#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define N int(1e3)
using namespace std;
ll n, m;
vector<pair<ll, ll>>adj[N+10];
ll gt[N+10][N+10];
pair<ll, ll>luu[N+10][N+10];
ll a, b, k, g;
ll g1[N+10], tg[N+10];
bool vis[N+10];
ll dis[N+10];
void djs(ll s)
{
    for(int i = 1; i <= n; i++) dis[i] = 1e18;
    priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>>pq;
    dis[s]=k+1;
    pq.push({k,s});
    while(!pq.empty())
    {
        auto top=pq.top();pq.pop();
        ll u=top.se;
        ll kc=top.fi;
        if(kc>dis[u]) continue;
        for(auto it:adj[u])
        {
            ll v=it.fi;
            ll w=it.se;
            ll them=0;
            pair<ll,ll>ed=luu[u][v];
            ll st=luu[u][v].fi;
            ll en=luu[u][v].se;
            if(dis[u]>=st && dis[u]<en) them=en-dis[u];

            if(dis[v] > dis[u] + w + them)
            {
                dis[v] = dis[u] + w + them;
                pq.push({dis[v], v});
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>n>>m;
    cin>>a>>b>>k>>g;
    for(int i=1; i<=g; i++) cin>>g1[i];
    for(int i=1; i<=m; i++)
    {
        ll u, v, w;
        cin>>u>>v>>w;
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
        gt[u][v]=w;
        gt[v][u]=w;
    }
    tg[g1[1]]=1;
    for(int i=1; i<g; i++)
    {
        ll u=g1[i];
        ll v=g1[i+1];
        ll cu=tg[u];
        ll moi=tg[u]+gt[u][v];
        luu[u][v]= {cu, moi};
        luu[v][u]= {cu, moi};
        tg[v]=moi;
    }
    memset(vis,0,sizeof vis);
    djs(a);
    cout<<dis[b]-(1+k);
    return 0;
}
