WA1 3 5 6
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
template <typename T> void read(T&x){
int sign=1;x=0;char c;
do{ c=getchar(); if(c=='-')sign=-1; }while(!isdigit(c));
do{ x=x*10+c-'0'; c=getchar(); }while(isdigit(c));
x*=sign;
}
int f[1145][1145];
int n,m;
const int N=3e6+10;
int a[N];
int op=0x3f3f3f3f3f/2;
signed main(){
read(n);
read(m);
for(int i=0;i<n;i++){
read(a[i]);
}
memset(f,0x3f,sizeof(f));
for(int i=0;i<n;i++){
f[i][i]=0;
}
while(m--){
int x,y,w;
read(x);
read(y);
read(w);
f[x][y]=w;
f[y][x]=w;
}
int q;
read(q);
int k=0;
while(q--){
int x,y,z;
cin>>x>>y>>z;
if(a[x]>z||a[y]>z){
cout<<"-1"<<endl;
continue;
}
while(a[k]<=z&&k<=z){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(f[i][j]>f[i][k]+f[k][j]){
f[i][j]=f[i][k]+f[k][j];
}
}
}
k++;
}
if(f[x][y]>=op){
cout<<"-1"<<endl;
}
else{
cout<<f[x][y]<<endl;
}
}
return 0;
}