//ALL FOR MYSELF, NOT ANYONE ELSE

//Prim��ôд�������������������������� 
#include<bits/stdc++.h>
//#define TERRY_MC
#define endl '\n'
using namespace std;
typedef long long ll;
#define int ll
const int N=1e4+20, M=2e6+10;;
int n,m,k,c[15],fa[N];
//vector<pair<int,int>> g[N];
struct edge {
	int u,v,w;
	friend bool operator<(edge a, edge b) {
		return a.w<b.w;
	}
}es[M];
void init() {
	for(int i=1;i<=n+k;i++)
		fa[i]=i;
}
int find(int x) {
	return fa[x]==x?x:fa[x]=find(fa[x]); 
}
bool merge(int x,int y) {
	int fx=find(x),fy=find(y);
	if(fx==fy) return false;
	fa[fx]=fy;
	return true;
}
signed main() {
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#ifndef TERRY_MC
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
#endif
	cin>>n>>m>>k;
	int u,v,w;
	for(int i=1;i<=m;i++) {
		cin>>u>>v>>w;
//		g[u].push_back({w,v});
//		g[v].push_back({w,u});
		es[i].u=u,es[i].v=v,es[i].w=w;
	}
	if(k!=0) {
		//����ԭ�������е㣨Kruskal���ܵ���ߣ����˿϶���𰸱�С�����粻������������ 
	//	for(int i=1;i<=n;i++) {
	//		g[0].push_back({0,i});
	//	}
		m+=n;
		for(int i=1;i<=k;i++) {
			cin>>c[i];
			//����ԭ��������� 
	//		g[0].push_back({c[i],i+n}) 
	//����Kruskalû�����������û�취awa 
			m++;
			es[m].u=0,es[m].v=i,es[m].w=c[i];
			int a;
			for(int j=1;j<=n;j++) {
				cin>>a;
	//			g[i+n].push_back({a,j});
	//			g[j].push_back({a,i+n});
				m++;
				es[m].u=j;
				es[m].v=i+n;
				es[m].w=a;
			}
		}
	}
	sort(es+1,es+m+1);
	init();
	int ans=0;
	for(int i=1;i<=m;i++)
		if(merge(es[i].u,es[i].v)) {
			ans+=es[i].w;
		}
	cout<<ans<<endl;
	//�ƺ��ò���Kruskal���ɷ��ֽ���Ҫ�������ߣ�����������Բ�����������ʹ��Prim) 
	//����***d��**����Primզд�� 
	//Kruskal�ɣ����ʹ��ɣ� 
	return 0;
}

