#include <fstream>
#include <algorithm>
#define Nmax 1900
#define Mmax 10099
#define Kmax 20
#define Inf 2000000000
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int N,M,K,U[Kmax];
unsigned C[Nmax][Nmax],sol;
int main()
{
f>>N>>M>>K;
for(int i=1;i<=K;++i)f>>U[i];
for(int i=1;i<=N;++i)
for(int j=1;j<=N;++j)
if(i!=j)C[i][j]=Inf;
for(int i=1;i<=M;++i)
{
int x,y,c;
f>>x>>y>>c;
C[x][y]=C[y][x]=c;
}
for(int k=1;k<=N;++k)
for(int i=1;i<=N;++i)
for(int j=1;j<=N;++j)
if(i!=j && (C[i][j]>C[i][k]+C[k][j]))
C[i][j]=C[i][k]+C[k][j];
//for(int i=1;i<=N;++i,g<<'\n')
//for(int j=1;j<=N;++j)g<<C[i][j]<<' ';
if(!K)
{
g<<C[1][N]<<'\n';
return 0;
}
sort(U+1,U+1+K);
sol=Inf;
do
{
unsigned int cost=C[1][U[1]]+C[U[K]][N];
for(int i=1;i<K;++i)cost+=C[U[i]][U[i+1]];
if(cost<sol)sol=cost;
}while (next_permutation(U+1,U+1+K));
g<<sol<<'\n';
f.close();g.close();
return 0;
}