#include<bits/stdc++.h>
using namespace std;
#define LF putchar('\n')
#define SP putchar(' ')
#define rep(i,a,b) for(register int i=(a);i<=(b);++i)
#define repp(i,a,b) for(register int i=(a);i>=(b);i--)
#define pill pair<int,int>
#define mem(t, v) memset((t),v,sizeof(t))
#define fir first
#define sec second
#define mk make_pair
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define lc root<<1
#define rc root<<1|1
typedef long long ll;
typedef unsigned long long ull;
template<typename T>
void read(T &x) {x=0;char ch=getchar();ll f=1;while(!isdigit(ch)){if(ch=='-')f*=-1;ch=getchar();}while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}x*=f;}
template<typename T, typename... Args>
void read(T &first, Args& ... args) {read(first);read(args...);}
template<typename T>
void write(T arg) {T x=arg;if(x<0) {putchar('-');x=-x;}if(x>9) {write(x/10);}putchar(x%10+'0');}
template<typename T, typename ... Ts>
void write(T arg, Ts ... args) {write(arg);if(sizeof...(args)!=0) {putchar(' ');write(args ...);}}
const ll mod=10007,N=200+10;
ll n,m,dp[N][N],a[N],q,last,now;
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
read(n,m);
rep(i,1,n){
rep(j,1,n)dp[i][j]=1e9;
}
rep(i,1,n){
read(a[i]);
dp[i][i]=0;
}
rep(i,1,m){
int a,b,c;
read(a,b,c);
a++,b++;
dp[a][b]=dp[b][a]=c;
}
read(q);
while(q--){
int x,y,t;
read(x,y,t);
x++,y++;
int k=lower_bound(a+1,a+1+n,t)-a;
now=k;
rep(k,last+1,now){
rep(i,1,n){
rep(j,1,n)dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
}
}
if(dp[x][y]==1e9 or a[x]>t or a[y]>t)write(-1);
else write(dp[x][y]);
LF;
last=now;
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
去wa求调