#include<stdio.h>
#define NMAX 2001
#define KMAX 16
#define min(a,b) a<b?a:b
FILE *fin = fopen("ubuntzei.in","r");
FILE *fout = fopen("ubuntzei.out","w");
int a[NMAX][NMAX],viz[KMAX],sol[KMAX],n,m,k,orase[KMAX+3],x,y,lg,z,i,j,lgTraseu,lgMin=999999,suma,b;
void bkt(int k)
{
int i;
if(k == lgTraseu+1)
{
suma=0;
suma = a[1][sol[1]];
for(i=2; i<=lgTraseu;i++)
suma+=a[sol[i-1]][sol[i]];
suma+=a[sol[lgTraseu]][n];
if(suma<lgMin && suma)
lgMin=suma;
}
else
{
for(i=1;i<=lgTraseu;i++)
if(!viz[i])
{
sol[k]=orase[i];
viz[i]=1;
bkt(k+1);
viz[i]=0;
}
}
}
int main()
{
fscanf(fin,"%d%d",&n,&m);
fscanf(fin,"%d",&k);
lgTraseu = k;
for(i=1; i <= k; i++)
fscanf(fin,"%d",&orase[i]);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
a[i][j]=a[j][i]=999999;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&x,&y,&lg);
a[x][y] = a[y][x] = lg;
}
for(z=1;z<=n;z++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
b=a[i][z]+a[z][j],a[i][j] = min(a[i][j],b);
bkt(1);
if(lgMin != 999999)
fprintf(fout,"%d",lgMin);
else
fprintf(fout,"%d",a[1][n]);
}