#include <bits/stdc++.h>
using namespace std;
long long m, t, mod, n, a[2100000], b[2100000], d[110];
inline void fwt(long long a[], long long f) {
  long long i, j, k;
  for (i = 1; i < n; i <<= 1)
    for (j = 0; j < n; j += (i << 1))
      for (k = 0; k < i; k++) {
        long long x = a[j + k], y = a[i + j + k];
        a[j + k] = (x + y) % mod, a[i + j + k] = (x + mod - y) % mod;
      }
  if (f == -1)
    for (i = 0; i < n; i++) a[i] /= n;
}
inline long long mul(long long x, long long y) {
  long long res = (x * y - (long long)((long double)x / mod * y) * mod);
  return res < 0 ? res + mod : res;
}
inline long long pw(long long x, long long p) {
  long long res = 1;
  while (p) {
    if (p & 1) res = mul(res, x);
    x = mul(x, x);
    p >>= 1;
  }
  return res;
}
signed main() {
  long long i, j, k;
  scanf("%I64d%I64d%I64d", &m, &t, &mod);
  n = (1ll << m);
  mod *= n;
  for (i = 0; i < n; i++) scanf("%I64d", &a[i]);
  for (i = 0; i <= m; i++) scanf("%I64d", &d[i]);
  for (i = 0; i < n; i++) {
    k = 0;
    for (j = 0; j < m; j++)
      if ((1 << j) & i) k++;
    b[i] = d[k];
  }
  fwt(a, 1), fwt(b, 1);
  for (i = 0; i < n; i++) b[i] = pw(b[i], t);
  for (i = 0; i < n; i++) a[i] = mul(a[i], b[i]);
  fwt(a, -1);
  mod /= n;
  for (i = 0; i < n; i++) printf("%I64d\n", a[i] % mod);
  return 0;
}
