#include<bits/stdc++.h>
using namespace std;
namespace acac
{
int tree[6400010],rt[200010],bcj[200010],son[6400010][2];
int n,m,q,cnt=1;
void build(int u,int l,int r)
{
if(l==r)return ;
int mid=(l+r)>>1;
son[u][0]=++cnt;
build(cnt,l,mid);
son[u][1]=++cnt;
build(cnt,mid+1,r);
}
void pu(int u)
{
tree[u]=tree[son[u][0]]+tree[son[u][1]];
}
void c(int u,int l,int r,int w)
{
if(l==r)
{
tree[cnt]=tree[u]+1;
return ;
}
int mid=(l+r)>>1,ycnt=cnt;
if(w<=mid)
{
son[cnt][1]=son[u][1];
son[cnt][0]=cnt+1;
++cnt;
c(son[u][0],l,mid,w);
}
else
{
son[cnt][0]=son[u][0];
son[cnt][1]=cnt+1;
++cnt;
c(son[u][1],mid+1,r,w);
}
pu(ycnt);
}
int qr(int u,int u2,int l,int r,int k)
{
if(l==r)return l;
int mid=(l+r)>>1;
if(tree[son[u][0]]-tree[son[u2][0]]>=k)return qr(son[u][0],son[u2][0],l,mid,k);
return qr(son[u][1],son[u2][1],mid+1,r,k-(tree[son[u][0]]-tree[son[u2][0]]));
}
int belong(int u)
{
if(bcj[u]!=u)return bcj[u]=belong(bcj[u]);
return u;
}
struct edge
{
int fr,to,v;
}e[500010];
bool cmp(edge a,edge b)
{
return a.v<b.v;
}
int nt[300010][4];
int ds;
void mst()
{
sort(e+1,e+1+m,cmp);
ds=n;
int num=0;
for(int i=1;i<=m;i++)
{
if(num==n-1)break;
int a=belong(e[i].fr),b=belong(e[i].to);
if(a==b)continue;
num++,ds++;
nt[ds][0]=a,nt[ds][1]=b,nt[ds][2]=e[i].v;
bcj[a]=bcj[b]=ds;
}
}
int F[300010][25],st[300010][25],xl[300010],kz[300010][3],T[300010];
int dfn=0;
void dfs(int u,int fa,int v)
{
T[u]=1;
F[u][0]=fa;
st[u][0]=v;
//cout<<u<<' '<<fa<<' '<<v<<endl;
for(int i=1;i<=20;i++)
{
F[u][i]=F[F[u][i-1]][i-1];
st[u][i]=max(st[u][i-1],st[F[u][i-1]][i-1]);
}
if(!nt[u][0]&&!nt[u][1])
{
xl[++dfn]=u;
kz[u][1]=kz[u][0]=dfn;
return ;
}
dfs(nt[u][0],u,nt[u][2]);
if(!nt[u][0])while(1);
kz[u][0]=kz[nt[u][0]][0];
dfs(nt[u][1],u,nt[u][2]);
if(!nt[u][1])while(1);
kz[u][1]=kz[nt[u][1]][1];
}
int ls[100010];
int A[100010];
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i]);
bcj[i]=i;
bcj[i+n]=i+n;
}
sort(A+1,A+1+n);
int tot=0;
A[0]=-1;
for(int i=1;i<=n;i++)
{
if(A[i]!=A[i-1])ls[++tot]=A[i];
A[i]=tot;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&e[i].fr,&e[i].to,&e[i].v);
}
mst();
for(int i=1;i<=n;i++)
{
int a=belong(i);
//cout<<a<<endl;
if(!T[a])dfs(a,0,0);
}
rt[0]=1;
build(1,1,tot);
for(int i=1;i<=n;i++)
{
int val=A[xl[i]];
// cout<<val<<' ';
rt[i]=++cnt;
c(rt[i-1],1,tot,val);
}
//cout<<endl;
while(q--)
{
int u,x,k;
scanf("%d%d%d",&u,&x,&k);
for(int i=20;i>=0;i--)
{
// cout<<u<<' '<<i<<' '<<st[u][i]<<endl;
if(st[u][i]<=x&&F[u][i])u=F[u][i];
}
// cout<<u<<endl;
// cout<<kz[u][1]-kz[u][0]+2-k<<endl;
if(kz[u][1]-kz[u][0]+1<k)cout<<"-1\n";
else
{
int ans=qr(rt[kz[u][1]],rt[kz[u][0]-1],1,tot,kz[u][1]-kz[u][0]+2-k);
// cout<<ans<<endl;
cout<<ls[ans]<<'\n';
}
}
return 0;
}
}
int main()
{
acac::main();
return 0;
}