#include<bits/stdc++.h>
using namespace std;
int dp[205][205], n, m, q, t[205];
void floyd(int w)
{
int k = 1;
while (k <= n && t[k] <= w)
{
for (int i = 1 ; i <= n ; i++)
{
for (int j = 1 ; j <= n ; j ++)
{
dp[i][j] = dp[j][i] = min(dp[i][j], dp[i][k] + dp[k][j]);
}
}
k++;
}
return ;
}
int work()
{
int x, y, w;
cin >> x >> y >> w;
x++, y++;
floyd(w);
if ((t[x] > w || t[y] > w) || dp[x][y] == 0x3f3f3f3f)
{
return -1;
}
return dp[x][y];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
memset(dp, 0x3f, sizeof dp);
for (int i = 1 ; i <= n ; i++)
{
cin >> t[i];
dp[i][i] = 0;
}
for (int i = 1 ; i <= m ; i++)
{
int x, y, w;
cin >> x >> y >> w;
x++, y++;
dp[x][y] = dp[y][x] = min(dp[x][y], w);
}
cin >> q;
while (q--)
{
cout << work() << "\n";
}
return 0;
}