#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
template<typename T>void re(T&x){
x = 0; int sign = 1; 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;
}
const int N = 3e6 + 1000;
ll n, m, q;
ll t[N];
ll f[400][400], v[400][400];
signed main(){
re(n), re(m);
memset(f, 0x3f, sizeof f);
for (int i = 0; i < n; i ++) re(t[i]);
for (int i = 1, x, y, w; i <= m; i ++){
re(x), re(y), re(w);
f[x][y] = f[y][x] = w;
}
re(q);
int k = 0, x, y, tim;
while (q --){
re(x), re(y), re(tim);
for (k; k < tim; k ++){
for (int i = 0; i < n; i ++){
for (int j = 0; j < n; j ++){
f[i][j] = min(f[i][j], f[k][j] + f[i][k]);
}
}
}
k = tim;
if (t[x] > tim || t[y] > tim){puts("-1");}
else {
if(f[x][y] == 0x3f3f3f3f3f3f3f3f) puts("-1");
else printf("%lld\n", f[x][y]);
}
}
return 0;
}