#include <bits/stdc++.h>
using namespace std;
const int yhy = 255, tiger_king = 50005;
int n, m, a[yhy], f[yhy][yhy];
struct awa {
int u, v, t;
};
awa problem[tiger_king];
bool cmp(awa x, awa y) {
return x.t < y.t;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
f[i][j] = INT_MAX / 2;
f[i][i] = 0;
}
for (int i = 0; i < n; i++)
cin >> a[i];
while (m--) {
int u, v, w;
cin >> u >> v >> w;
f[u][v] = w;
f[v][u] = w;
}
int q, k = 0;
cin >> q;
for (int i = 1; i <= q; i++)
cin >> problem[i].u >> problem[i].v >> problem[i].t;
sort(problem + 1, problem + q + 1, cmp);
for (int qwq = 1; qwq <= q; qwq++) {
int u = problem[qwq].u, v = problem[qwq].v, t = problem[qwq].t;
if (a[k] <= t && k < n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
f[i][j] = f[j][i] = min(f[i][j], f[i][k] + f[k][j]);
k++;
}
if (a[u] > t || a[v] > t) {
puts("-1");
continue;
}
if (f[u][v] == INT_MAX / 2) {
puts("-1");
continue;
}
cout << f[u][v] << '\n';
}
return 0;
}