RT
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<memory.h>
using namespace std;
int n,k,m,q,l,o,p,idx;
int a[500][500],t[1000005];
bool v[1000005]={false};
void floyd(int x)
{
for(register int i=0;i<n;i++)
{
for(register int j=0;j<n;j++)
a[i][j]=min(a[i][j],a[i][x]+a[x][j]);
}
}
int main()
{
std::ios::sync_with_stdio(false);
scanf("%d%d",&n,&m);
for(register int i=0;i<n;i++)
{
for(register int j=0;j<n;j++)
{
if(i==j) a[i][j]=0;
else a[i][j]=0x3f3f3f3f;
}
}
for(register int i=0;i<n;++i) scanf("%d",&t[i]);
for(register int i=1;i<=m;++i)
{
int u,v,z;
scanf("%d%d%d",&u,&v,&z);
a[u][v]=a[v][u]=z;
}
scanf("%d",&q);
while(q--)
{
int aa,b,c;
int cnt=0;
scanf("%d%d%d",&aa,&b,&c);
while(t[cnt]<=c&&cnt<n)
{
floyd(cnt);
cnt++;
}
if(t[aa]>c||t[b]>c||a[aa][b]==0x3f3f3f3f) puts("-1");
else printf("%d\n",a[aa][b]);
}
return 0;
}