#include<bits/stdc++.h>
#define oo 200000000
using namespace std;
int n,m,k;
int dist[20][2005],sol[2005],ans;
int c[20],dp[1<<20][20];
vector < pair <int,int> > G[1005];
int M[22];
void read()
{
int x,i,y,z;
freopen("ubuntzei.in","r",stdin);
scanf("%d %d\n",&n,&m);
scanf("%d",&k);
//M.push_back(1);
for(i=0;i<k;i++)
scanf("%d",&M[i]);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
G[x].push_back(make_pair(y,z));
G[y].push_back(make_pair(x,z));
}
}
priority_queue < pair<int,int> > q;
bool viz[1005];
inline void dijkstra(int i,int dist[])
{
int j,nod;
memset(viz,0,sizeof(viz));
for(j=1;j<=n;j++)
dist[j]=oo;
dist[i]=0;
q.push(make_pair(i,0));
viz[i]=1;
while(!q.empty())
{
nod=q.top().first;
q.pop();
vector <pair <int,int> > ::iterator it;
// if(!viz[nod])
for(it=G[nod].begin();it!=G[nod].end();it++)
{
// if(!viz[(*it).first])
if(dist[(*it).first]>dist[nod]+(*it).second)
{
dist[(*it).first]=dist[nod]+(*it).second;
q.push(make_pair((*it).first,dist[(*it).first]));
//viz[(*it).first]=1;
}
}
// viz[nod]=1;
}
}
void dynamic()
{
int i,j,cel,les;
//prima e submultimea vida
for(i=0;i<(1<<k);i++)
{
for(j=0;j<k;j++)
{
if(i!=(1<<j)) dp[i][j]=oo;
if( i>>j & 1 == 1) //j+1
{
//cout<<j+1<<' ';
for(cel=0;cel<k;cel++)
if(cel!=j && (i>>cel & 1 ==1))
{
les=dp[i-(1<<j)][cel]+dist[cel][M[j]];
dp[i][j]=min(dp[i][j],les);
//cout<<dp[i][j]<<' ';
}
}
}
//cout<<endl;
}
}
int main()
{
int i;
read();
dijkstra(1,sol);
//cout<<sol[M[0]];
for(i=0;i<k;i++)
dijkstra(M[i],dist[i]);
for(i=0;i<k;i++)
dp[(1<<i)][i]=sol[M[i]];
//cout<<dp[1][0];
dynamic();
ans=oo;
for(i=0;i<k;i++)
{
// cout<<dp[(1<<k)-1][i]<<' '<<dist[i][n]<<endl;
ans=min(ans,dp[(1<<k)-1][i]+dist[i][n]);
}
freopen("ubuntzei.out","w",stdout);
cout<<ans;
}