#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0;
bool flag=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
{
flag=0;
}
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return (flag?x:~(x-1));
}
inline void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
{
write(x/10);
putchar(x%10+'0');
}else
{
putchar(x+'0');
}
return;
}
int ei=0,h[16010];
struct edge
{
int to,v,next;
}e[16010];
inline void add(int x,int y,int v)
{
ei++;
e[ei].to=y;
e[ei].v=v;
e[ei].next=h[x];
h[x]=ei;
return;
}
int dis[16010],u[16010];
inline void spfa(int f)
{
memset(dis,0x3f,sizeof(dis));
dis[f]=0;
queue<int>qu;
qu.push(f);
u[f]=1;
while(!qu.empty())
{
int f1=qu.front();
qu.pop();
u[f1]=0;
for(int i=h[f1];i;i=e[i].next)
{
int to=e[i].to;
int v=e[i].v;
if(dis[to]>dis[f1]+v)
{
dis[to]=dis[f1]+v;
if(u[to]==0)
{
qu.push(to);
u[to]=1;
}
}
}
}
}
int n,p,c,A[8010];
signed main()
{
n=read(),p=read(),c=read();
for(register int i=1;i<=n;i++)
{
A[i]=read();
}
int a,b,d;
for(register int i=1;i<=c;i++)
{
a=read(),b=read(),d=read();
add(a,b,d);
add(b,a,d);
}
int sum=0,ans=214748364;
for(register int i=1;i<=p;i++)
{
spfa(i);
sum=0;
for(register int j=1;j<=n;j++)
{
sum+=dis[A[j]];
}
ans=min(ans,sum);
}
write(ans);
return 0;
}