#include <bits/stdc++.h>
#define maxn 210
#define inf 0x3f3f3f3f
using namespace std;
int a[maxn],w[maxn][maxn],f[maxn][maxn];
int n;
void setnum(){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
f[i][j] = inf;
}
}
for(int i = 0;i < n;i++){
f[i][i] = 0;
}
}
void floyd(int k){
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];
}
}
}
}
int main(){
int m;
cin >> n >> m;
for(int i = 0;i < n;i++){
cin >> a[i];
}
setnum();
for(int i = 1;i <= m;i++){
int x,y,z;
cin >> x >> y >> z;
f[x][y] = f[y][x] = z;
}
int q;
cin >> q;
int last = 0;
for(int i = 1;i <= q;i++){
int x,y,t;
cin >> x >> y >> t;
if(a[x] > t || a[y] > t){
cout << "-1" << endl;
continue;
}
int j;
for(j = last;j < n;j++){
if(a[j] > t) break;
floyd(j);
}
last = j;
if(f[x][y] == inf){
cout << "-1";
}
else{
cout << f[x][y];
}
}
return 0;
}