rt
#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<stack>
#define in inline
#define re register
#define int long long
#define MAXN 1000005
#define sped_cout_cin ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
int n,m,c,head[MAXN],dis[MAXN],s[MAXN],sum[MAXN],cnt,u,v,w;
bool vis[MAXN]; queue<int> q;
struct edge{int to,next,w;}e[MAXN];
inline void add(int u,int v,int w){
e[++cnt].to=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
return ;
}
inline void spfa(){
dis[0]=0;vis[0]=1;sum[0]++;
q.push(0);
while(!q.empty()){
re int top=q.front();
q.pop();
vis[top]=0;
for(re int i=head[top];i!=-1;i=e[i].next){
if(dis[e[i].to]<dis[top]+e[i].w){
dis[e[i].to]=dis[top]+e[i].w;
sum[e[i].to]++;
}
if(!vis[e[i].to]){
q.push(e[i].to);
vis[e[i].to]=1;
}
}
}
return ;
}
signed main(){
freopen("P6145_6.in","r",stdin);
memset(head,-1,sizeof(head));
memset(dis,-0x3f,sizeof(dis));
sped_cout_cin
cin>>n>>m>>c;
for(re int i=1;i<=n;i++){
cin>>s[i];
add(0,i,s[i]);
}
for(re int i=1;i<=c;i++){
cin>>u>>v>>w;
add(u,v,w);
}
spfa();
for(re int i=1;i<=n;i++) cout<<dis[i]<<'\n';
return 0;
}