import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main{
static Read sc=new Read(System.in);
static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));
static int n,m;
static int[] t=new int[205];
static int[][] map=new int[205][205];
public static void main(String[] args) {
n=sc.nextInt();
m=sc.nextInt();
for(int i=0;i<n;i++)
t[i]=sc.nextInt();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(i==j) map[i][j]=0;
else map[i][j]=0x3f3f3f;
for(int i=1;i<=m;i++) {
int a=sc.nextInt(),b=sc.nextInt(),c=sc.nextInt();
map[a][b]=map[b][a]=Math.min(map[a][b], c);
}
int q=sc.nextInt();
while(q-->0) {
int now=0;
int a=sc.nextInt(),b=sc.nextInt(),k=sc.nextInt();
while(t[now]<=k&&now<n) {
floyd(now);
now++;
}
if(t[a]>k||t[b]>k) out.println(-1);
else if(map[a][b]==0x3f3f3f) out.println(-1);
else out.println(map[a][b]);
}
out.flush();
}
public static void floyd(int k) {
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]= map[i][k]+map[k][j];
}
}
static class Read{
BufferedReader br;
StringTokenizer st;
public Read(InputStream in) {
br=new BufferedReader(new InputStreamReader(in),16384);
eat("");
}
public void eat(String s) {
st=new StringTokenizer(s);
}
public String nextLine() {
try {
return br.readLine();
} catch (Exception e) {
return null;
}
}
public boolean hasNext() {
while(!st.hasMoreTokens()) {
String s=nextLine();
if(s==null) return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return st.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
}
}