#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m,q;
int t[201];
int g[201][201];
//int vis[201];
//int dis[201],book[201];
void update(int now){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(g[i][j]>g[i][now]+g[now][j]){
g[i][j]=g[i][now]+g[now][j];
}
}
}
return;
}
signed main(){
// step 1、读题、声明变量
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i!=j) g[i][j]=0x3f3f3f3f;
else g[i][j]=0;
}
}
/**
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j) g[i][j]=0;
else g[i][j]=0x3f3f3f3f;
}
}
*/
for(int i=0;i<n;i++){
cin>>t[i];
}
// step 2、输入
for(int i=1;i<=m;i++){
int x,y,w;
cin>>x>>y>>w;
g[x][y]=g[y][x]=w;
}
cin>>q;
int now=0;
while(q--){
int x,y,tt;
cin>>x>>y>>tt;
while(t[now]<=tt && now<n){
update(now);
now++;
}
if(t[x]>tt || t[y]>tt) {
cout<<-1<<'\n';
continue;
}else{
if(g[x][y]==0x3f3f3f3f) cout<<-1<<'\n';
else cout<<g[x][y]<<'\n';
}
}
/**
while(q--){
int x,y,tt;
cin>>x>>y>>tt;
memset(vis,0,sizeof vis);
memset(dis,0,sizeof dis);
memset(book,0,sizeof book);
for(int i=0;i<n;i++){
if(tt>=t[i]){
vis[i]=1;
}
}
//for(int i=0;i<n;i++){
// cout<<vis[i]<<' ';
//}
//cout<<'\n';
if(!vis[x] || !vis[y]){
cout<<-1<<'\n';
continue;
}
for(int i=0;i<n;i++){
if(vis[i]) dis[i]=g[x][i];
else dis[i]=0x3f3f3f3f;
}
//for(int i=0;i<n;i++){
// cout<<dis[i]<<' ';
//}
//cout<<'\n';
book[x]=1;
for(int i=1;i<=n-1;i++){
int minn=0x3f3f3f3f,u;
for(int j=0;j<n;j++){
if(!book[j] && dis[j]<minn && vis[j]){
minn=dis[j];
u=j;
}
}
book[u]=1;
for(int j=0;j<n;j++){
if(!book[i] && dis[j]>dis[u]+g[u][j] && vis[j]){
dis[j]=dis[u]+g[u][j];
}
}
}
if(dis[y]==0x3f3f3f3f) cout<<-1<<'\n';
else cout<<dis[y]<<'\n';
}
*/
// step 3、处理
// step 4、输出
return 0;
}