#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MX=100010, inf=2e9;

int n, m, k;
int C[MX];
ll ans;
struct edge {
	int u, v, co;
	bool operator < (const edge &e) const {
		return co<e.co;
	}
};
vector<edge> E;

int U[MX];
int find(int x){
	return x==U[x] ? x : U[x]=find(U[x]);
}
void unite(int x, int y){
	U[find(y)]=find(x);
}

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    cin>>n>>m>>k;
    for(int i=1; i<=n; i++) cin>>C[i];
    for(int i=1; i<=m; i++){
    	int u,v,c; cin>>u>>v>>c;
    	E.push_back({u,v,c});
	}
	iota(U, U+n+1, 0);

	vector<int> P[MX];
	for(int i=1; i<=n; i++) P[C[i]].push_back(i);
	for(int i=1; i<=k; i++)
		for(int x:P[i])
			unite(x, P[i][0]);

	sort(E.begin(), E.end());

	int cnt=0;
	for(edge &e:E){
		int u=e.u, v=e.v, c=e.co;
		if(cnt>=k-1 || find(u)==find(v)) continue;
		cnt++;
		unite(u,v);
		ans+=c;
	}
	cout<<(cnt<k-1 ? -1 : ans);
    return 0;
}