..//重边问题。。。
//感觉好坑。。。
#include<iostream>
#include<stdio.h>
using namespace std;
const int MAX=999999999;
int map[502][502],visit[502],low[502];
int n;
void prim()
{
memset(visit,0,sizeof(visit));
int pos;
visit[1]=1;
pos=1;
int i,j,result=0;
for(i=1;i<=n;i++)
{
low[i]=map[pos][i];
}
for(i=1;i<n;i++)
{
int min=MAX;
for(j=1;j<=n;j++)
{
if(visit[j]==0&&min>low[j])
{
min=low[j];
pos=j;
}
}
result+=min;
if(result>=MAX)
break;
visit[pos]=1;
for(j=1;j<=n;j++)
{
if(visit[j]==0&&low[j]>map[pos][j])
low[j]=map[pos][j];
}
}
if(result>=MAX)
printf("-1\n");
else
printf("%d\n",result);
}
int main()
{
int t;
cin>>t;
while(t--)
{
int m,k;
scanf("%d%d%d",&n,&m,&k);
int a,b,c;
int i,number,number1,j,p;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=MAX;
}
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c)//这个地方其实蛮关键的,刚开始就是因为这个地方不知道,才WA了9次
{
map[a][b]=c;
map[b][a]=c;
}
}
int b1[501];
for(i=1;i<=k;i++)
{
cin>>number1;
number=number1;
j=1;
while(number1--)
{
scanf("%d",&a);
b1[j]=a;
j++;
}
for(j=1;j<=number;j++)
{
for(p=j+1;p<=number;p++)
{
map[b1[j]][b1[p]]=0;
map[b1[p]][b1[j]]=0;
}
}
}
prim();
}
}