#include <stdio.h>
using namespace std;
FILE *fin = fopen("ubuntzei.in", "r");
FILE *fout = fopen("ubuntzei.out", "w");
char folos[2003];
int n,m;
int minim=1000000000,interesanti;
int interes[2003];
int sol[2003];
int c[2003][2003];
void afisare()
{
int actual=0;
for(int i=1;i<=interesanti+1;i++)
{
actual+=c[sol[i-1]][sol[i]];
}
if(actual<minim)minim=actual;
}
void bkt(int p)
{
if(p>interesanti) afisare();
else
{
for(int i=1;i<=interesanti;i++)
{
if(folos[i]==0)
{
folos[i]=1;
sol[p]=interes[i];
bkt(p+1);
folos[i]=0;
}
}
}
}
int main()
{
fscanf(fin, "%d%d", &n, &m);
fscanf(fin, "%d", &interesanti);
for(int i=1;i<=interesanti;i++)
{
fscanf(fin, "%d", &interes[i]);
}
for(int i=1;i<=m;i++)
{
int x,y,z;
fscanf(fin, "%d%d%d", &x,&y,&z);
c[x][y]=z;
c[y][x]=z;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(c[i][k]!=0 && c[k][j]!=0 && (c[i][j] > c[i][k] + c[k][j] || c[i][j]==0) && i!=j) c[i][j]=c[i][k]+c[k][j];
}
sol[0]=1;
sol[interesanti+1]=n;
bkt(1);
for(int i=1;i<=interesanti;i++)
{
c[0][interes[i]]=0;
c[interes[i]][interesanti+1]=0;
}
fprintf(fout, "%d", minim);
return 0;
}