#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define FORR(i,a,b) for(int i=(int)(b)-1;i>=(int)(a);i--)

#define CHMIN(a,b) (a)=min((a),(b))
#define CHMAX(a,b) (a)=max((a),(b))

#define DEBUG(x) cout<<#x<<": "<<(x)<<endl

int n,m,k;
int p[125252];
int c[125252];
int j[125252];

vl dijkstra(vector<vector<pll>> &g, int s){
	int n = g.size();
	vl dist(n,1ll<<60);
	priority_queue<pll> Q;
	dist[s] = 0;
	Q.push(pll(-0,s));
	while(Q.size()){
		pll P = Q.top(); Q.pop();
		int p = P.second;
		if(dist[p] != -P.first)continue;
		for(pll PP : g[p]){
			int to = PP.first;
			ll cost = PP.second;
			ll nd = dist[p] + cost;
			if(nd < dist[to]){
				dist[to] = nd;
				Q.push(pll(-nd,to));
			}
		}
	}
	return dist;
}

int main(){
	scanf("%d%d%d",&n,&m,&k);
	REP(i,n)scanf("%d",p+i);
	REP(i,n)scanf("%d",c+i),c[i]--;
	REP(i,n)scanf("%d",j+i);
	// 0 - i
	vector<vector<pll>> g(n);
	REP(i,m){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		--x;--y;
		g[x].push_back(pll(y,z));
		g[y].push_back(pll(x,z));
	}
	vl dist = dijkstra(g,0);
	// 0 - pan - i
	vector<vector<pll>> g2(n+n);
	REP(i,n)for(pll P : g[i]){
		g2[i].push_back(P);
	}
	REP(i,n){
		g2[i].push_back(pll(i+n,-p[i]));
	}
	vl dist2 = dijkstra(g2,0);
	// (0-pan-) i - jam (-0)
	vector<vector<pll>> g3(1+n+k);
	REP(i,n)for(pll P : g[i]){
		g3[i].push_back(P);
	}
	REP(i,n){
		g3[n+k].push_back(pll(i,dist2[i+n]));
		g3[i].push_back(pll(n+c[i],-j[i]+dist[i]));
	}
	vl dist3 = dijkstra(g3,n+k);
	// output
	REP(i,k){
		printf("%lld\n",-dist3[n+i]);
	}
	return 0;
}
