#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#define INF 1000000000
using namespace std;
int N,M,R;
int r[9];
int G[200][200];
void wf(){
  for(int i=0;i<N;i++){
    for(int j=0;j<N;j++){
      for(int k=0;k<N;k++){
	G[j][k]=min(G[j][k],G[j][i]+G[i][k]);
      }
    }
  }
}
int main(){
  for(int i=0;i<200;i++){
    for(int j=0;j<200;j++){
      G[i][j]=INF;
      if(i==j)G[i][j]=0;
    }
  }
  cin >> N >> M >> R;
  for(int i=0;i<R;i++){
    cin >> r[i];
    r[i]--;
  }
  for(int i=0;i<M;i++){
    int a,b,c;
    cin >> a >> b >> c;
    a--;b--;
    G[a][b]=c;
    G[b][a]=c;
  }
  wf();
  sort(r,r+R);
  int Min=INF;
  do{
    int ans=0;
    for(int i=0;i<R-1;i++){
      ans+=G[r[i]][r[i+1]];
    }
    Min=min(Min,ans);
  }while(next_permutation(r,r+R));
  cout << Min << endl;
  return 0;
}