#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
typedef vector<P> vp;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
#define rep(i,n) for(ll i=0; i<(ll)(n); i++)
#define REP(i,k,n) for(ll i=(ll)(k); i<(ll)(n); i++)
#define pb emplace_back
template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;}
template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;}
template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<'\n';}
const ll inf=3001001001001001001;
struct BIT{
vi bit;ll n;
ll sum(ll i){
ll res=0;
for(;i>0;i-=i&-i)res+=bit[i];
return res;
}
BIT(ll n_):n(n_){bit=vi(n+1);}
void add(ll i,ll x){
for(i++;i<=n;i+=i&-i)bit[i]+=x;
}
ll get(ll a,ll b){
if(b<=a)return 0ll;
return sum(b)-sum(a);
}
};
int main(){
cin.tie(0);ios::sync_with_stdio(false);
ll n, X; cin >> n >> X;
vi v(2*n), c(2*n), score(2*n), next(2*n);
vi seen(n,-1);
rep(i,2*n) {
cin >> v[i]; v[i]--;
}
rep(i,2*n) cin >> c[i];
BIT bit(4*n);
ll cnt=0;
rep(i,2*n){
if(seen[v[i]]!=-1){
next[seen[v[i]]]=i;
next[i]=2*n+seen[v[i]];
cnt++;
bit.add(i,1);
} else{
seen[v[i]]=i;
score[0]+=cnt;
}
}
REP(i,1,2*n){
bit.add(next[i-1],-1);
bit.add(i-1+2*n,1);
score[i]=score[i-1]+bit.get(i,next[i-1])-(i-1+2*n-next[i-1]-1-bit.get(next[i-1]+1,i-1+2*n));
}
rep(i,2*n)score[i]=n*n-score[i];
vi srt(2*n);rep(i,2*n)srt[i]=i;
sort(srt.begin(), srt.end(), [&](ll a,ll b){if(c[a]==c[b]){if(score[a]==score[b])return a<b;return score[a]>score[b];};return c[a]<c[b];});
vp al;
for(auto x:srt){
if(al.size()==0||(score[x]-al.back().first)*X+al.back().second>c[x])al.pb(score[x],c[x]);
}
auto calc=[&](ll idx,ll K) {
if(idx<0||idx>=al.size())return inf;
if(K<=al[idx].first)return al[idx].second;
return (K-al[idx].first)*X+al[idx].second;
};
ll q;cin>>q;
rep(qq,q){
ll K; cin >> K;
ll l=lower_bound(al.begin(),al.end(),P(K,-1))-al.begin();
cout << min(calc(l,K), calc(l-1,K)) << '\n';
}
}