program ubuntzei;
const inf=maxint;
type dist_min=array[1..10000] of longint;
vizitat=array[1..10000] of 0..1;
var t:array[0..2,1..20000] of longint;
start:array[1..10000] of integer;
d:dist_min;
cd:array[1..100000] of integer;
viz:vizitat;
fr:array[1..15] of integer;
m,n,k:integer;
f,g:text;
procedure citire;
var i,j,z,distanta:integer;
begin
readln(f,n,m);
read(f,k);
for i:=1 to k do
read(f,fr[i]);
readln(f);
for z:=1 to m do
begin
readln(f,i,j,distanta);
t[0,z]:=j;
t[1,z]:=start[j];
t[2,z]:=distanta;
start[i]:=z;
end;
end;
procedure initialize(var d:dist_min;var viz:vizitat);
var i:integer;
begin
for i:=1 to n do
begin
d[i]:=inf;
viz[i]:=0;
end;
end;
procedure bellman_ford(x:integer);
var sf,st,nod,p:longint;
begin
st:=1; sf:=1;
cd[st]:=x; d[x]:=0;
while st<=sf do
begin
viz[cd[st]]:=0; nod:=cd[st];
p:=start[nod];
while p<>0 do
begin
if d[nod]+t[2,p]<d[t[0,p]] then
d[t[0,p]]:=d[nod]+t[2,p];
if viz[t[0,p]]=0 then
begin
viz[t[0,p]]:=1;
sf:=sf+1;
cd[sf]:=t[0,p];
end;
p:=t[1,p];
end;
st:=st+1;
end;
end;
procedure solve;
var dmin,i:integer;
begin
if k>0 then
begin
dmin:=0;
bellman_ford(1);
dmin:=d[fr[1]];
initialize(d,viz);
for i:=2 to k-1 do
begin
bellman_ford(fr[i]);
dmin:=dmin+d[fr[i+1]];
initialize(d,viz);
end;
bellman_ford(fr[k]);
dmin:=dmin+d[n];
writeln(g,dmin);
end
else
begin
bellman_ford(1);
writeln(g,d[n]);
end;
end;
begin
assign(f,'ubuntzei.in'); reset(f);
assign(g,'ubuntzei.out'); rewrite(g);
citire;
solve;
close(f);
close(g);
end.