#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
long long modpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b /= 2;
  }
  return ans;
}
void add(long long &a, long long b) {
  a += b;
  if (a >= mod) a -= mod;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  int w[n];
  bool g[n];
  long long sa = 0, sb = 0;
  for (int i = 0; i < n; i++) cin >> g[i];
  for (int i = 0; i < n; i++) {
    cin >> w[i];
    if (g[i])
      sa += w[i];
    else
      sb += w[i];
  }
  vector<long long> inv;
  for (int i = -m; i <= m; i++) inv.push_back(modpow(sa + sb + i, mod - 2));
  int os = m;
  long long p[m + 1][m + 1], q[m + 1][m + 1];
  for (int i = 0; i <= m; i++)
    for (int j = 0; j <= m; j++) p[i][j] = q[i][j] = 0;
  for (int i = m; i >= 0; i--)
    for (int j = m; j >= 0; j--)
      if (i + j < m) {
        add(p[i][j], p[i + 1][j] * inv[i - j + os] % mod * (sa + i + 1) % mod);
        add(q[i][j], q[i + 1][j] * inv[i - j + os] % mod * (sa + i) % mod);
        if (sb - j) {
          add(p[i][j], p[i][j + 1] * inv[i - j + os] % mod * (sb - j) % mod);
          add(q[i][j],
              q[i][j + 1] * inv[i - j + os] % mod * (sb - j - 1) % mod);
        }
      } else if (i + j == m)
        p[i][j] = q[i][j] = 1;
  stringstream ss;
  for (int i = 0; i < n; i++) {
    if (g[i])
      ss << p[0][0] * w[i] % mod << endl;
    else
      ss << q[0][0] * w[i] % mod << endl;
  }
  cout << ss.str();
  return 0;
}
