#include <bits/stdc++.h>
using namespace std;
int B[1 << 17], C[1 << 17], BC[1 << 17], ans[1 << 17];
int modPow(long long int b, int e) {
  long long int r = 1;
  b %= 998244353;
  while (e > 0) {
    if (e & 1) r *= b, r %= 998244353;
    e >>= 1;
    b *= b, b %= 998244353;
  }
  return r;
}
int FWHT(int* a, int s) {
  int i, j, k;
  for (k = 1; k < (1 << s); k <<= 1) {
    for (i = 0; i < (1 << s); i += (k << 1)) {
      for (j = 0; j < k; j++) {
        int v = a[i + j + k];
        a[i + j + k] = a[i + j] - v, a[i + j] = a[i + j] + v;
        if (a[i + j + k] < 0) a[i + j + k] += 998244353;
        if (a[i + j] >= 998244353) a[i + j] -= 998244353;
      }
    }
  }
  return 0;
}
int main() {
  int i;
  int n, k, x, y, z, a, b, c;
  int xora = 0;
  scanf("%d %d %d %d %d", &n, &k, &x, &y, &z);
  for (i = 0; i < n; i++) {
    scanf("%d %d %d", &a, &b, &c);
    xora ^= a, b ^= a, c ^= a;
    B[b]++, C[c]++, BC[b ^ c]++;
  }
  long long int inv2 = modPow(2, 998244353 - 2),
                inv4 = modPow(4, 998244353 - 2);
  FWHT(B, k), FWHT(C, k), FWHT(BC, k);
  for (i = 0; i < (1 << k); i++) {
    long long int p = (B[i] + C[i]) * inv2, q = (B[i] + BC[i]) * inv2,
                  r = (C[i] + BC[i]) * inv2;
    p %= 998244353, q %= 998244353, r %= 998244353;
    long long int all = ((n + p + q + r) * inv4) % 998244353;
    long long int c = modPow((long long int)x + y + z, all);
    c *= modPow((long long int)x - y + z, (all - q + 998244353) % 998244353),
        c %= 998244353;
    c *= modPow((long long int)x + y - z, (all - r + 998244353) % 998244353),
        c %= 998244353;
    c *= modPow((long long int)x - y - z, (all - p + 998244353) % 998244353),
        c %= 998244353;
    if (c < 0) c += 998244353;
    ans[i] = c;
  }
  FWHT(ans, k);
  for (i = 0; i < (1 << k); i++)
    ans[i] =
        ((long long int)ans[i] * modPow(1 << k, 998244353 - 2)) % 998244353;
  for (i = 0; i < (1 << k); i++)
    printf("%d%c", ans[i ^ xora], (i == (1 << k) - 1) ? '\n' : ' ');
  return 0;
}
