#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,w;
int mp[205][205],tim[205];
#define inf 0x3f3f3f3f
void update(int k){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
if(mp[i][j]>mp[i][k]+mp[k][j]);
mp[i][j]=mp[j][i]=mp[i][k]+mp[k][j];
}
return ;
}
void check(int a,int b,int t){
if(tim[a]>t || tim[b]>t){
printf("-1\n");
return ;
}
else if(mp[a][b]==inf){
printf("-1\n");
return ;
}
else{
printf("%d\n",mp[a][b]);
return ;
}
}
int main(){
memset(mp,inf,sizeof(mp));
memset(tim,inf,sizeof(tim));
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&tim[i]);
mp[i][i]=0;
}
for(int i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&w);
mp[x][y]=mp[y][x]=w;
}
int q;
scanf("%d",&q);
int now=0;
int a,b,t;
while(q--){
scanf("%d%d%d",&a,&b,&t);
while(tim[now]<=t && now<n){
update(now);
now++;
}
check(a,b,t);
}
return 0;
}