#include using namespace std; using ll=long long; constexpr int MAX_C=10; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N,M; cin>>N>>M; vector G(N,vector(0,0)); for(int i=0;i>A>>B; --A,--B; G[A].push_back(B); G[B].push_back(A); } vector C(N,0); for(int &i:C)cin>>i,--i; vector W(MAX_C,0ll); for(ll &i:W)cin>>i; vector root(1<>C[j]&1))continue; queuebfs; bfs.push(j); while(bfs.size()){ int v=bfs.front(); bfs.pop(); for(int k:G[v]){ if((i>>C[k]&1)&&root[i][k]==-1){ root[i][k]=j; bfs.push(k); } } } } } vector cost(1<>j&1)cost[i]+=W[j]; } } int Q; cin>>Q; while(Q--){ int U,V; cin>>U>>V; --U,--V; ll ans=1e12; for(int i=0;i<1<