#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int n,m,q,cnt=1;
int dis[201][201];
int t[201];
void flo(int k){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
}
}
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)continue;
dis[i][j]=inf;
}
}
for(int i=1;i<=n;i++){
scanf("%d",&t[i]);
}
int x,y,z;
for(int i=1;i<=m;i++){
scanf("%d %d %d",&x,&y,&z);
dis[x][y]=z;
dis[y][x]=z;
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d %d %d",&x,&y,&z);
while(t[cnt]<=z&&cnt<=n){
flo(cnt);
cnt++;
}
if((t[x]>z||t[y]>z)||dis[x][y]==inf){
printf("-1\n");
}else{
printf("%d\n",dis[x][y]);
}
}
return 0;
}