#include <bits/stdc++.h>
using namespace std;
bool debug = 1;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
long long ln, lk, lm;
long long t, p;
long long a[1100105], c[1100105];
int b[30];
long long mull(long long a, long long b, long long p) {
  long long v = (a * b - (long long)((long double)a / p * b + 1e-8) * p);
  return v < 0 ? v + p : v;
}
long long fastPow(long long x, long long y, long long mod) {
  long long ans = 1;
  while (y > 0) {
    if (y & 1) ans = mull(x, ans, mod);
    x = mull(x, x, mod);
    y >>= 1;
  }
  return ans;
}
void fwt(long long *A, int fg) {
  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 x = A[j + k], y = A[j + k + i];
        A[j + k] = (x + y) % p;
        A[j + k + i] = (x + p - y) % p;
      }
    }
  }
  if (fg == -1) {
    for (int(i) = 0; (i) < (int)(n); (i)++) A[i] /= n;
  }
}
int main() {
  scanf("%d%lld%lld", &m, &t, &p);
  n = 1 << m;
  p *= n;
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    scanf("%lld", a + i);
    a[i] %= p;
  }
  for (int(i) = 0; (i) < (int)(m + 1); (i)++) scanf("%d", b + i);
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    c[i] = b[__builtin_popcount(i)];
    c[i] %= p;
  }
  fwt(a, 1);
  fwt(c, 1);
  for (int(i) = 0; (i) < (int)(n); (i)++) {
    a[i] = mull(a[i], fastPow(c[i], t, p), p);
  }
  fwt(a, -1);
  for (int(i) = 0; (i) < (int)(n); (i)++) printf("%lld\n", a[i]);
  return 0;
}
