import sys sys.setrecursionlimit(10000+10) INFTY = 10**10+10 N,M = map(int,input().split()) A = [tuple(map(int,input().split())) for _ in range(M)] C = [-1]+list(map(int,input().split())) def r_find(i): if T[i][0]==i: return i return r_find(T[i][0]) def r_union(i,j): ri = r_find(i) rj = r_find(j) if ri==rj:return if T[ri][1]>T[rj][1]: T[rj][0] = ri elif T[rj][1]>T[ri][1]: T[ri][0] = rj else: T[rj][0] = ri T[ri][1] += 1 D = {} for i in range(1<<10): T = [[j,0] for j in range(N+1)] for j in range(M): u,v = A[j] if (i>>(C[u]-1) & 1) and (i>>(C[v]-1) & 1): r_union(u,v) col = [-1]*(N+1) cnt = 0 for u in range(1,N+1): ru = r_find(u) if col[ru]<0: col[ru] = cnt cnt += 1 col[u] = col[ru] D[i] = col[:] W = list(map(int,input().split())) Q = int(input()) for _ in range(Q): u,v = map(int,input().split()) ans = INFTY for i in range(1<<10): if D[i][u]==D[i][v]: cnt = 0 for k in range(10): if (i>>k) & 1: cnt += W[k] ans = min(ans,cnt) if ans>=INFTY: print(-1) else: print(ans)