#include <bits/stdc++.h>
template <typename T>
void read(T &x);
template <typename T>
void read(T &x, T &y);
template <typename T>
void read(T &x, T &y, T &z);
template <typename T>
void write(T x);
template <typename T>
void writeC(T x);
template <typename T>
void writeN(T x);
long long _qpow(long long a, long long b, long long M) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = (__int128)res * a % M;
    a = (__int128)a * a % M;
    b >>= 1;
  }
  return res;
}
int n, bt[200];
long long t, p;
long long f[1 << 20], g[1 << 20];
void FWT(long long *a, int lim, int flag) {
  for (int i = 1; i < lim; i <<= 1)
    for (int j = 0; j < lim; j += (i << 1))
      for (register int k = 0; k < i; ++k) {
        long long a1 = a[j + k], a2 = a[j + k + i];
        a[j + k] = (a1 + a2) % p;
        a[j + k + i] = (a1 - a2 + p) % p;
      }
  if (flag == -1)
    for (int i = 0; i < lim; ++i) a[i] /= lim;
}
signed main() {
  scanf("%d%lld%lld", &n, &t, &p);
  p *= (1 << n);
  for (int i = 0; i < (1 << n); ++i) {
    read(f[i]);
    f[i] %= p;
  }
  for (int i = 0; i <= n; ++i) read(bt[i]);
  for (int i = 0; i < (1 << n); ++i) g[i] = bt[__builtin_popcount(i)] % p;
  FWT(f, (1 << n), 1);
  FWT(g, (1 << n), 1);
  for (int i = 0; i < (1 << n); ++i)
    f[i] = (__int128)f[i] * _qpow(g[i], t, p) % p;
  FWT(f, (1 << n), -1);
  for (int i = 0; i < (1 << n); ++i) writeN((int)f[i] % p);
  return 0;
}
template <typename T>
void read(T &x) {
  x = 0;
  char c = getchar();
  T flag = 1;
  while (c < '0' || c > '9') {
    if (c == '-') flag = -flag;
    c = getchar();
  }
  while ('0' <= c && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  x *= flag;
}
template <typename T>
void read(T &x, T &y) {
  read(x);
  read(y);
}
template <typename T>
void read(T &x, T &y, T &z) {
  read(x);
  read(y);
  read(z);
}
template <typename T>
void writeC(T x) {
  if (x < 0) x = ~x + 1, putchar('-');
  if (x > 9) writeC(x / 10);
  putchar(x % 10 + '0');
}
template <typename T>
void write(T x) {
  writeC(x);
  putchar(' ');
}
template <typename T>
void writeN(T x) {
  writeC(x);
  puts("");
}
