#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
struct data{
int bh,zhi;
friend bool operator <(data x,data y)
{
return x.zhi>y.zhi;
}
};
struct line{
int u,v,w,pre;
}l[2901];
int n,p,c,sum,ans=0x3f3f3f3f;
int niu[501],last[801],dis[801];
bool flag[801];
void dij(int start)
{
memset(dis,0x3f,sizeof(dis));
memset(flag,0,sizeof(flag));
priority_queue<data> q;
dis[start]=0;
q.push({start,0});
while(!q.empty())
{
int x=q.top().bh;
q.pop();
flag[x]=true;
for(int i=last[x];i!=0;i=l[i].pre)
{
int zd=l[i].v;
if(!flag[zd]&&dis[zd]>dis[x]+l[i].w)
{
dis[zd]=dis[x]+l[i].w;
q.push({zd,dis[zd]});
}
}
}
}
int main()
{
cin>>n>>p>>c;
for(int i=1;i<=n;i++)
cin>>niu[i];
for(int i=1,x,y,w;i<=c;i++)
{
cin>>x>>y>>w;
l[i*2-1].u=x;
l[i*2-1].v=y;
l[i*2-1].w=w;
l[i*2-1].pre=last[x];
last[x]=i*2-1;
l[i*2].u=y;
l[i*2].v=x;
l[i*2].w=w;
l[i*2].pre=last[y];
last[y]=i*2;
}
for(int i=1;i<=p;i++)
{
dij(i);
sum=0;
for(int j=1;j<=n;j++)
if(dis[niu[j]]!=0x3f3f3f3f)sum+=dis[niu[j]];
ans=min(ans,sum);
}
cout<<ans<<endl;
return 0;
}
错了 Subtask1 的测试点