N, Q = gets.split.map(&:to_i) A = gets.split.map(&:to_i) S = gets.chomp T = gets.split.map(&:to_i) len = A.map(&:bit_length).max memo = Array.new(len) { Array.new(2, 0) } len.times do |i| val = 2.pow(i) 2.times do |d| cur = d A.each.with_index do |a, idx| b_cur = cur if S[idx] == '0' cur &= a[i] else cur |= a[i] end memo[i][d] += (cur ^ b_cur) * val end end end T.each do |t| ans = 0 len.times do |i| d = t[i] ans += memo[i][d] end puts ans end