#include<bits/stdc++.h>
using namespace std;
#define int int
int n,m,f[210][210],q[210][210],a[210];
int read() {
int f=1,x=0;
char ch=getchar();
for(; ch<'0'||ch>'9'; ch=getchar());
for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-48;
return x*f;
}
inline void write(int n) {
if (n==0) return;
write(n/10);
putchar(n%10+'0');
}
void chushihua() {
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
f[i][j]=q[i][j];
}
inline int minn(int x,int y) {
return x<y?x:y;
}
signed main() {
n=read();
m=read();
for(int i=1; i<=n; i++) a[i]=read();
memset(f,62,sizeof(f));
for(int i=1; i<=n; i++) f[i][i]=0;
for(int i=1; i<=m; i++) {
int x=read()+1,y=read()+1,z=read();
f[x][y]=f[y][x]=z;
}
for(int T=read(); T; T--) {
int x=read()+1,y=read()+1,t=read();
if (a[x]>t||a[y]>t) {
putchar('-'),putchar('1');
putchar(10);
continue;
}
int A=f[0][0];
int k=1;
while (a[k]<=t&&k<=n) {
for(int i=1; i<=n; i++)
if (a[i]<=t)
for(int j=1; j<=n; j++)
if (a[j]<=t)
if (f[i][k]+f[k][j]<=f[i][j]) f[i][j]=f[i][k]+f[k][j];
k++;
}
if (f[x][y]==A) {
putchar('-'),putchar('1');
putchar(10);
continue;
} else
write(f[x][y]),putchar(10);
}
return 0;
}