#include<cstdio>
#include<vector>
#include<deque>
#include<cstring>
#include<algorithm>
#define inf 999999999
using namespace std;
int rez,n,i,j,k,m,a,b,x,y,mat[2005][2005],cost[2005],q[20],t[20];
vector<pair<int,int> >v[2005];
deque<int>c;
bool viz[2005];
void dijkstra(int x)
{
memset(viz,false,sizeof(viz));
memset(cost,0,sizeof(cost));
viz[x]=true;
c.push_back(x);
while (!c.empty())
{
x=c.front();
for (j=0;j<v[x].size();j++)
{
a=v[x][j].first;
b=v[x][j].second;
if (!viz[a]) viz[a]=true,c.push_back(a),cost[a]=b+cost[x];else
if (cost[a]>b+cost[x]) cost[a]=cost[x]+b,c.push_back(a);
}
c.pop_front();
}
}
int main()
{
freopen("ubuntzei.in","r",stdin);
freopen("ubuntzei.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&k);
for (i=1;i<=k;i++)scanf("%d",&q[i]);
for (i=1;i<=m;i++) scanf("%d %d %d",&a,&b,&j),v[a].push_back(make_pair(b,j)),v[b].push_back(make_pair(a,j));
k++;q[k]=n;q[0]=1;
for (i=0;i<=k-1;i++)
{
dijkstra(q[i]);
for (j=i+1;j<=k;j++) mat[q[i]][q[j]]=mat[q[j]][q[i]]=cost[q[j]];
}
if (k-1)
{
for (i=1;i<=k;i++) t[i]=i;rez=inf;int sum;k--;
do{
sum=0; for (i=1;i<=k;i++) sum+=mat[q[t[i]]][q[t[i+1]]];rez=min(rez,sum+mat[1][q[t[1]]]);
}while(next_permutation(t+1,t+k+1));
printf("%d\n",rez);
}else printf("%d\n",mat[1][n]);
return 0;
}