import std.stdio;
import std.conv;
import std.array;
import std.string;
import std.algorithm;
import std.math;

void main() {
	string [] t;
	t = chomp(readln()).split();
	int N, M, R;
	N = to!int(t[0]); M = to!int(t[1]); R = to!int(t[2]);
	t = chomp(readln()).split();
	int [] r;
	for(int i = 0; i < R; i++) r ~= to!int(t[i]);

	long [210][210]C;
	const long INF = to!long(1e15);
	for(int i = 0; i < N; i++) {
		for(int j = 0; j < N; j++) {
			C[i][j] = INF;
		}
		C[i][i] = 0;
	}


	for(int i = 0; i < M; i++) {
		int a, b;
		long c;
		t = chomp(readln()).split();
		a = to!int(t[0]); b = to!int(t[1]); c = to!long(t[2]);
		a--; b--;
		C[a][b] = min(C[a][b], c);
		C[b][a] = min(C[b][a], c);
	}

	for(int i = 0; i < N; i++) {
		for(int j = 0; j < N; j++) {
			for(int k = 0; k < N; k++) {
				C[j][k] = min(C[j][k], C[j][i] + C[i][k]);
			}
		}
	}

	sort(r);
	long res = INF;
	do {
		long tmp = 0;
		for(int i = 1; i < r.length; i++) {
			tmp += C[r[i-1]-1][r[i]-1];
		}
		res = min(res, tmp);
	} while(nextPermutation(r));
	writeln(res);
}
