#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10,M=5e5+10;
int n,m,q,h[N],faa[N],fa[N][25],num,dis[N],dep[N];
bool v[N];
struct nodde{
int x,y,c;
}a[M];
int head[N],tot;
struct node{
int to,next;
}edge[2*M];
bool cmp(nodde x,nodde y)
{
return x.c<y.c;
}
void add(int from,int to)
{
++tot;
edge[tot].to=to;
edge[tot].next=head[from];
head[from]=tot;
}
int find(int x)
{
if(faa[x]==x)return x;
return faa[x]=find(faa[x]);
}
void k()
{
for(int i=1;i<=2*n;i++)faa[i]=i;
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
int fx=find(a[i].x);
int fy=find(a[i].y);
if(fx!=fy)
{
++num;
faa[fx]=faa[fy]=faa[num]=num;
dis[num]=a[i].c;
add(num,fx);
add(num,fy);
}
}
return ;
}
void dfs(int x)
{
v[x]=1;
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
fa[y][0]=x;
for(int i=1;i<=20;i++)fa[y][i]=fa[fa[y][i-1]][i-1];
dep[y]=dep[x]+1;
dfs(y);
}
}
int found(int v,int x)
{
for(int i=20;i>=0;i--)
{
if(dis[fa[v][i]]<=x)v=fa[v][i];
}
return v;
}
struct nodee{
int ls,rs;
int val;
}t[N*15];
int root[N],tot1;
int build(int l,int r)
{
int p=++tot1;
if(l==r)
{
t[p].val=0;
return p;
}
int mid=l+r>>1;
t[p].ls=build(l,mid);
t[p].rs=build(mid+1,r);
t[p].val=0;
return p;
}
int modify(int now,int l,int r,int x,int d)
{
int p=++tot1;
t[p]=t[now];
if(l==r)
{
t[p].val+=d;
return p;
}
int mid=l+r>>1;
if(x<=mid)t[p].ls=modify(t[now].ls,l,mid,x,d);
else t[p].rs=modify(t[now].rs,mid+1,r,x,d);
t[p].val=t[t[p].ls].val+t[t[p].rs].val;
return p;
}
int query(int p,int q,int l,int r,int k)
{
if(l==r)return l;
int mid=l+r>>1;
int lcnt=t[t[p].ls].val-t[t[q].ls].val;
if(k<=lcnt)return query(t[p].ls,t[q].ls,l,mid,k);
else return query(t[p].rs,t[q].rs,mid+1,r,k-lcnt);
}
signed main()
{
cin>>n>>m>>q;
for(int i=1;i<=n;i++)cin>>h[i];
for(int i=1;i<=m;i++)
{
cin>>a[i].x>>a[i].y>>a[i].c;
}
num=n;
k();
for(int i=num;i>n;i--)
{
if(!v[i])
{
dep[i]=1;
fa[i][0]=i;
dfs(i);
}
}
root[0]=build(1,num);
for(int i=1;i<=num;i++)root[i]=modify(root[i-1],1,num,h[i],1);
while(q--)
{
int v,x,k;
cin>>v>>x>>k;
int cnt=found(v,x);
int ans=query(root[cnt],root[v-1],1,num,num-k+1);
cout<<h[cnt]<<"\n";
}
return 0;
}