#include #define rep(a,n) for (ll a = 0; a < (n); ++a) using namespace std; //using namespace atcoder; using ll = long long; typedef pair P; typedef pair PP; typedef vector > Graph; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } const ll INF = 1e18; #define debug(v) cout<<#v<<": ",prt(v); template inline void prt(pair p){cout<<"("< inline void prt(tuple p){cout<<"("<(p)<<", "<(p)<<", "<(p)<<")\n";} inline void prt(bool p){if(p)cout<<"True"<<'\n';else cout<<"False"<<'\n';} template inline void prt(vector v){cout<<'{';for(ll i=0;i inline void prt(vector >& vv){ for(const auto& v : vv){ prt(v); } } template inline void prt(deque v){cout<<'{';for(ll i=0;i inline void prt(map v){cout<<'{';ll c=0;for(auto &p: v){cout< inline void prt(unordered_map v){cout<<'{';ll c=0;for(auto &p: v){cout< inline void prt(set v){cout<<'{';for(auto i=v.begin();i!=v.end();i++){cout<<*i;if(i!=--v.end())cout<<", ";}cout<<'}'<<'\n';} template inline void prt(multiset v){cout<<'{';for(auto i=v.begin();i!=v.end();i++){cout<<*i;if(i!=--v.end())cout<<", ";}cout<<'}'<<'\n';} int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); //input ll n,q; cin >> n >> q; vectora(n); rep(i,n)cin>>a[i]; string s; cin >> s; //前計算 //各bitに着目してn回の操作で何回変化するか //0-startの場合 vectorzero(62,0); rep(i,62){ int now = 0; rep(j,n){ if(now==0){ if(s[j]=='1'&&((a[j]>>i)&1)){ now=1; zero[i]++; } } else{ if(s[j]=='0'&&(!((a[j]>>i)&1))){ now=0; zero[i]++; } } } } //1-startの場合 vectorone(62,0); rep(i,62){ int now = 1; rep(j,n){ if(now==0){ if(s[j]=='1'&&((a[j]>>i)&1)){ now=1; one[i]++; } } else{ if(s[j]=='0'&&(!((a[j]>>i)&1))){ now=0; one[i]++; } } } } //query処理 rep(i,q){ ll t; cin >> t; ll ans = 0; ll two = 1; rep(j,62){ if((t>>j)&1){ ans += two*one[j]; } else{ ans += two*zero[j]; } two*=2; } cout << ans << endl; } return 0; }