#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
const int maxn = 2e5 + 100;
long long dp[52][52][52];
bool vis[52][52][52];
long long val[52][52][52];
int a[maxn], w[maxn];
long long qmod(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    b >>= 1;
    a = a * a % mod;
  }
  return ans;
}
int flag;
int dfs(int n, int i, int j, int k, long long p, long long v, long long sp,
        long long sn) {
  if (!n) {
    return 1LL * p * v % mod;
  }
  if (vis[i][j][k]) {
    return val[i][j][k] * qmod(dp[i][j][k], mod - 2) % mod * p % mod;
  }
  dp[i][j][k] = p;
  val[i][j][k] +=
      dfs(n - 1, i + 1, j, k,
          1LL * p * sp % mod * qmod(v + sp + sn, mod - 2) % mod, v, sp + 1, sn);
  val[i][j][k] += dfs(n - 1, i, j + 1, k,
                      1LL * p * sn % mod * qmod(v + sp + sn, mod - 2) % mod, v,
                      sp, max(sn - 1, 0LL));
  val[i][j][k] += dfs(n - 1, i, j, k + 1,
                      1LL * p * v % mod * qmod(v + sp + sn, mod - 2) % mod,
                      max(v + flag, 0LL), sp, sn);
  val[i][j][k] %= mod;
  vis[i][j][k] = 1;
  return val[i][j][k];
}
int main() {
  ios::sync_with_stdio(false);
  long long sn = 0, sp = 0;
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  for (int i = 0; i < n; ++i) {
    cin >> w[i];
    if (a[i]) {
      sp += w[i];
    } else
      sn += w[i];
  }
  for (int i = 0; i < n; ++i) {
    memset(dp, 0, sizeof dp);
    memset(vis, 0, sizeof vis);
    memset(val, 0, sizeof val);
    if (a[i]) {
      flag = 1;
      sp -= w[i];
    } else {
      flag = -1;
      sn -= w[i];
    }
    cout << dfs(m, 0, 0, 0, 1, w[i], sp, sn) << endl;
    if (a[i]) {
      sp += w[i];
    } else
      sn += w[i];
  }
  return 0;
}
