#include <bits/stdc++.h>
using namespace std;
inline char gc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline long long read() {
  char c = getchar();
  long long tot = 1;
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') {
    tot = -1;
    c = getchar();
  }
  long long sum = 0;
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * tot;
}
inline void wr(long long x) {
  if (x < 0) {
    putchar('-');
    wr(-x);
    return;
  }
  if (x >= 10) wr(x / 10);
  putchar(x % 10 + '0');
}
inline void wrn(long long x) {
  wr(x);
  putchar('\n');
}
inline void wri(long long x) {
  wr(x);
  putchar(' ');
}
inline void wrn(long long x, long long y) {
  wri(x);
  wrn(y);
}
inline void wrn(long long a, long long b, long long c) {
  wri(a);
  wrn(b, c);
}
long long n, m, ans, t, mod, a[2400055], b[2400055], c[2400055], f[2400055];
void fwt(long long *a) {
  for (long long i = 1; i < n; i <<= 1) {
    for (long long j = 0; j < n; j += (i << 1)) {
      for (long long k = (0); k < (i); k++) {
        long long x = a[j + k], y = a[j + k + i];
        a[j + k] = (x + y) % mod;
        a[j + k + i] = (x - y + mod) % mod;
      }
    }
  }
}
long long mul(long long x, long long y) {
  return ((x * y - (long long)(((long double)x * y + 0.5) / mod) * mod) % mod +
          mod) %
         mod;
}
long long ksm(long long x, long long k) {
  long long sum = 1;
  while (k) {
    if (k & 1) sum = mul(sum, x);
    x = mul(x, x);
    k = k >> 1;
  }
  return sum;
}
signed main() {
  m = read();
  t = read();
  mod = read();
  n = 1 << m;
  mod <<= m;
  for (long long i = (0); i < (n); i++) a[i] = read();
  for (long long i = (0); i <= (m); i++) c[i] = read();
  for (long long i = (0); i < (n); i++) b[i] = c[f[i] = f[i >> 1] + (i & 1)];
  fwt(a);
  fwt(b);
  for (long long i = (0); i < (n); i++)
    b[i] = ksm(b[i], t), a[i] = mul(a[i], b[i]);
  fwt(a);
  mod /= n;
  for (long long i = (0); i < (n); i++) {
    a[i] /= n;
    wrn(a[i] % mod);
  }
  return 0;
}
