#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 60;
const int MOD = 998244353;
void add(long long& a, long long b) {
  if (b < 0) b += MOD;
  a = (a + b) % MOD;
}
void mul(long long& a, long long b) { a = a * b % MOD; }
long long modpow(long long a, long long b) {
  if (b == 0) return 1;
  long long ret;
  if (b % 2 == 0) {
    long long t = modpow(a, b / 2) % MOD;
    ret = t * t % MOD;
  } else {
    long long t = modpow(a, (b - 1) / 2) % MOD;
    ret = a * t % MOD * t % MOD;
  }
  ret %= MOD;
  return ret;
}
long long modinv(long long a) { return modpow(a, MOD - 2) % MOD; }
int main() {
  int n, m;
  cin >> n >> m;
  int a[n], w[n];
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) cin >> w[i];
  int sum[2] = {0};
  for (int i = 0; i < n; i++) sum[a[i]] += w[i];
  for (int x = 0; x < n; x++) {
    vector<vector<vector<long long>>> dp(
        m + 1, vector<vector<long long>>(m + 1, vector<long long>(m + 1, 0)));
    dp[0][0][0] = 1;
    sum[a[x]] -= w[x];
    for (int i = 0; i < m; i++)
      for (int j = 0; j < m; j++)
        for (int k = 0; k < m; k++) {
          if (dp[i][j][k] == 0) continue;
          int l = i - j - k;
          int s0 = sum[0] - k;
          int s1 = sum[1] + l;
          int sx = w[x] + (a[x] ? j : -j);
          int s = s0 + s1 + sx;
          long long c = modinv(s) * dp[i][j][k] % MOD;
          add(dp[i + 1][j + 1][k], sx * c % MOD);
          add(dp[i + 1][j][k + 1], s0 * c % MOD);
          add(dp[i + 1][j][k], s1 * c % MOD);
        }
    long long ans = 0;
    for (int j = 0; j < m + 1; j++) {
      int wgt = w[x] + (a[x] ? j : -j);
      for (int k = 0; k < m + 1; k++) {
        add(ans, dp[m][j][k] * wgt % MOD);
      }
    }
    cout << ans << endl;
    sum[a[x]] += w[x];
  }
}
