#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 2e18;
const int MAXV = 2e6 + 5;
struct AIB
{
int v[MAXV];
void init()
{
for(int i=0;i<MAXV;i++)
v[i] = 0;
}
int qry(int poz)
{
int aux = 0;
for(int i=poz;i>0;i-=(i&(-i)))
aux += v[i];
return aux;
}
void upd(int poz, int newv)
{
for(int i=poz;i<MAXV;i+=(i&(-i)))
v[i] += newv;
}
};
int n, x;
int a[MAXV], c[MAXV];
int base[MAXV];
void precalc()
{
AIB ris, les;
ris.init();
les.init();
base[1] = n * (n+1) / 2;
vector<int> le(MAXV, 0), ri(MAXV, 0);
for(int i=1;i<=2*n;i++)
{
if(!le[a[i]])
{
le[a[i]] = i;
les.upd(i, +1);
}
else
{
ri[a[i]] = i;
base[1] += ris.qry(i) - ris.qry(le[a[i]]);
ris.upd(i, +1);
}
}
for(int start=1;start<2*n;start++)
{
base[start + 1] = base[start];
les.upd(le[a[start]], -1);
ris.upd(ri[a[start]], -1);
/*cout<<le[a[start]]<<" "<<ri[a[start]]<<" le & ri\n";
cout<<" -= "<<les.qry(ri[a[start]])<<"\n";
cout<<" += "<<ris.qry(start + 2*n) - ris.qry(ri[a[start]])<<"\n\n";*/
base[start + 1] -= les.qry(ri[a[start]]);
base[start + 1] += ris.qry(start + 2*n) - ris.qry(ri[a[start]]);
le[a[start]] = ri[a[start]];
ri[a[start]] = start + 2*n;
les.upd(le[a[start]], +1);
ris.upd(ri[a[start]], +1);
}
//for(int start=1;start<=2*n;start++)
// cout<<start<<" "<<base[start]<<" base\n";
}
int sol[MAXV];
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>x;
for(int i=1;i<=2*n;i++)
{
cin>>a[i];
a[2*n + i] = a[i];
}
for(int i=1;i<=2*n;i++)
{
cin>>c[i];
}
precalc();
vector<pair<int,int>> qrys;
int q;
cin>>q;
for(int i=1;i<=q;i++)
{
int k;
cin>>k;
qrys.push_back({k, i});
sol[i] = INF;
}
sort(qrys.begin(), qrys.end());
for(auto [k,qid]:qrys)
{
for(int start=1;start<=2*n;start++)
{
sol[qid] = min(sol[qid], c[start] + x * max(0LL, k - base[start]));
}
}
for(int i=1;i<=q;i++)
{
assert(sol[i] != INF);
cout<<sol[i]<<"\n";
}
return 0;
}