#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mp make_pair
#define fi first
#define se second
#define fr front
#define INF 2e9
using namespace std;

int n,m,k,a[15][10005],fa[10005],val[10005],c[10005];
struct edge{
	int u,v,w;
	friend bool operator<(edge a,edge b){
		return a.w<b.w;
	} 
}e[1000005];
vector<pii> g[20005],t[15][20005];

int find(int a){
	if(fa[a]==a)return a;
	return fa[a]=find(fa[a]);
}

void kruskal(){
	sort(e+1,e+m+1);
	int ans=0;
	for(int i=1;i<=n+k;i++)fa[i]=i;
	for(int i=1;i<=m;i++){
		int u=e[i].u,v=e[i].v,w=e[i].w;
		int fau=find(u),fav=find(v);
		if(fau==fav)continue;fa[fau]=fav;
		ans+=e[i].w;
	}
	cout<<ans;
}

signed main(){
	ios::sync_with_stdio(false);
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		cin>>e[i].u>>e[i].v>>e[i].w;
	}
	for(int i=1;i<=k;i++){
		cin>>c[i];
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
			e[++m].u=n+i;e[m].v=j;e[m].w=a[i][j];
		}
	}
	kruskal();
}
/*
��Ŀ�е�������ԭ����n�������е�
���ѷ��֣�һ���ֻ���ɳ�һ�Σ�����������
 
ֻ�������һ���ˣ����ǵ���ɾ�ߣ�ÿ���������������ܱ��������������
�����û���Ԥ�������ⲿ���ڲ���
Ȼ������ö�ٱߵ�ʱ����Կ��ǵ����ߵļ�����û�к��������ͨ 

д�����ɣ�����ֱ��ö�������㣬 
*/
