#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
class Edge
{
public:
int l,r,val,nextline;
}eline[2900];
class Number
{
public:
int v,n;
};
priority_queue<Number> r;
bool visited[1600];
int dis[1600],elast[1600],cow[1600],N,P,C,ans(INT_MAX),temp=1;
bool operator<(Number L,Number R)
{
return L.v>R.v;
}
void heap_add(int u,int v,int w)
{
eline[temp].l=u;
eline[temp].r=v;
eline[temp].val=w;
eline[temp].nextline=elast[eline[temp].l];
elast[eline[temp].l]=temp++;
}
void dijkstra(int s)
{
int i;
for(i=1;i<=P;i++) dis[i]=inf;
dis[s]=0;
Number _now;
_now.v=0,_now.n=s;
r.push(_now);
while(!r.empty())
{
_now=r.top();
r.pop();
for(i=elast[_now.n];i!=0;i=eline[i].nextline)
if (dis[eline[i].r]>dis[_now.n]+eline[i].val)
{
dis[eline[i].r]=dis[_now.n]+eline[i].val;
Number temp;
temp.v=dis[eline[i].r],temp.n=eline[i].r;
r.push(temp);
}
}
}
int main()
{
int A,B,D,i,j;
scanf("%d%d%d",&N,&P,&C);
for(i=1;i<=N;i++)
{
scanf("%d",&cow[i]);
}
for(i=1;i<=C;i++)
{
scanf("%d%d%d",&A,&B,&D);
heap_add(A,B,D);
heap_add(B,A,D);
}
for(i=1;i<=P;i++)
{
dijkstra(i);
int sum=0;
for(j=1;j<=N;j++) sum+=dis[cow[j]];
if (sum<ans) ans=sum;
}
printf("%d",ans);
}