#include <stdio.h>
#include <string.h>
#define nmax 511
#define pmax 55
#define mmax 201100
#define inf 500111000
#define FOR(i,s,d) for(i=(s);i<(d);++i)
int n,m,p,z,nr[mmax],urm[mmax],v[nmax],ct[mmax],D[pmax],aux[nmax];
int a[nmax][pmax][pmax],viz[nmax],min[nmax][nmax];
void Vadd(int i,int j,int c)
{
urm[++z]=v[i];
v[i]=z, nr[z]=j, ct[z]=c;
}
void dijkstra(int s)
{
int ii,j,i;
FOR(i,1,n+1)
aux[i]=inf;
memset(viz,0,sizeof(viz));
aux[s]=0;
FOR(ii,0,n)
{
j=1;
FOR(i,2,n+1)
if(!viz[i]&&(viz[j]||(aux[i]<aux[j])))
j=i;
viz[j]=1;
FOR(i,1,n+1)
if(aux[i]>aux[j]+min[j][i])
aux[i]=aux[j]+min[j][i];
}
memcpy(min[s],aux,sizeof(aux));
}
int MIN(int x,int y)
{
return x<y?x:y;
}
int doit(int x,int i,int j)
{
int ii,aux;
if(a[x][i][j]==-1)
{
aux=inf;
FOR(ii,i,j+1)
aux=MIN(aux,min[x][D[ii]]+doit(D[ii],i,ii-1)+doit(D[ii],ii+1,j));
a[x][i][j]=aux;
}
return a[x][i][j];
}
int main()
{
FILE *fi=fopen("team.in","r"),*fo=fopen("team.out","w");
fscanf(fi,"%d",&p);
fscanf(fi,"%d",&n);
fscanf(fi,"%d",&m);
int ii,i,j,ct;
FOR(i,1,n+1) FOR(j,1,n+1)
min[i][j]=inf;
FOR(ii,0,m)
{
fscanf(fi,"%d %d %d",&i,&j,&ct);
if(ct<min[i][j])
min[i][j]=min[j][i]=ct;
// Vadd(i,j,ct);
// Vadd(j,i,ct);
}
FOR(i,1,p+1)
fscanf(fi,"%d",&D[i]);
fclose(fi);
FOR(ii,1,n+1) FOR(i,1,p+1) FOR(j,i,p+1)
a[ii][i][j]=-1;
D[0]=1;
FOR(i,0,p+1)
dijkstra(D[i]);
fprintf(fo,"%d\n",doit(1,1,p));
fclose(fo);
return 0;
}