#include <iostream>
using namespace std;
#define int long long
void road(int dp[201][201][201],int t[205],int x,int y,int t1,int n)
{
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= n;j++)
{
if (t[i] > t1 || t[j] > t1)
{
dp[0][i][j] = 1e15;
}
}
}
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= n;j++)
{
for (int q = 1;q <= n;q++)
{
dp[i][j][q] = min(dp[i - 1][j][q],dp[i - 1][i][j] + dp[i - 1][j][q]);
}
}
}
if (t[x + 1] > t1 || t[y + 1] > t1 || dp[n][x + 1][y + 1] == 1e15)
{
cout << -1 << endl;
}
else
{
cout << dp[n][x + 1][y + 1] << endl;
}
}
signed main()
{
int n,m;
cin >> n >> m;
int t[205] = {};
int dp[201][201][201] = {};
for (int i = 1;i <= n;i++)
{
cin >> t[i];
}
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= n;j++)
{
if (i == j) dp[0][i][j] = 0;
else dp[0][i][j] = 1e15;
}
}
for (int i = 1;i <= m;i++)
{
int x,y,w;
cin >> x >> y >> w;
dp[0][x][y] = dp[0][y][x] = w;
}
int q;
cin >> q;
for (int i = 1;i <= q;i++)
{
int x,y,t1;
cin >> x >> y >> t1;
road(dp,t,x,y,t1,n);
}
return 0;
}