#include <bits/stdc++.h>
void err() { std::cout << std::endl; }
template <typename T, typename... Args>
void err(T a, Args... args) {
  std::cout << a << ' ';
  err(args...);
}
using namespace std;
const int mod = 998244353;
const int inf = 1 << 30;
const int maxn = 200000 + 5;
const int maxq = 3000 + 5;
long long qpow(long long x, long long n) {
  long long r = 1;
  while (n > 0) {
    if (n & 1) r = r * x % mod;
    n >>= 1;
    x = x * x % mod;
  }
  return r;
}
long long inv(int x) { return qpow(x, mod - 2); }
void add(long long& x, long long y) {
  x += y;
  if (x >= mod) x -= mod;
}
int n, m, a[maxn], w[maxn];
long long f[maxq][maxq];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  int sa = 0, sb = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", w + i);
    if (a[i])
      sa += w[i];
    else
      sb += w[i];
  }
  f[0][0] = 1;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j <= i; j++) {
      int a = sa + j, b = sb - (i - j);
      long long fm = inv(a + b);
      add(f[i + 1][j + 1], f[i][j] * a % mod * fm % mod);
      add(f[i + 1][j], f[i][j] * b % mod * fm % mod);
    }
  }
  long long ea = 0, eb = 0;
  for (int i = 0; i <= m; i++) {
    ;
    add(ea, f[m][i] * (sa + i) % mod);
    add(eb, f[m][i] * (sb - (m - i)) % mod);
  };
  long long iva = inv(sa), ivb = inv(sb);
  for (int i = 1; i <= n; i++) {
    if (a[i]) {
      printf("%lld\n", 1ll * w[i] * iva % mod * ea % mod);
    } else {
      printf("%lld\n", 1ll * w[i] * ivb % mod * eb % mod);
    }
  }
  return 0;
}
