#include <bits/stdc++.h>
using namespace std;
long long mod;
long long f[1 << 21], a[21 + 2], g[1 << 21];
int n;
long long mul(long long x, long long y) {
  return ((x * y - (long long)((long double)x * y / mod + 0.5) * mod) % mod +
          mod) %
         mod;
}
long long ksm(long long a, long long b, long long res = 1) {
  for (; b; b >>= 1) {
    if (b & 1) res = mul(res, a);
    a = mul(a, a);
  }
  return res;
}
void fwt(long long f[], int n) {
  for (int i = 1; i < n; i <<= 1)
    for (int j = 0; j < n; j += i << 1)
      for (int k = 0; k < i; k++) {
        long long a = f[j + k], b = f[i + j + k];
        f[j + k] = (a + b) % mod;
        f[i + j + k] = (a - b + mod) % mod;
      }
}
int main() {
  long long k;
  scanf("%d%lld%lld", &n, &k, &mod);
  mod <<= n;
  for (int i = 0; i < (1 << n); i++) scanf("%d", &f[i]);
  for (int i = 0; i <= n; i++) scanf("%d", &a[i]);
  n = 1 << n;
  for (int i = 0; i < n; i++) g[i] = a[__builtin_popcount(i)];
  fwt(f, n);
  fwt(g, n);
  for (int i = 0; i < n; i++) f[i] = ksm(g[i], k, f[i]);
  fwt(f, n);
  for (int i = 0; i < n; i++) printf("%lld\n", f[i] / n);
  return 0;
}
