#include <bits/stdc++.h>
using namespace std;
long long inv(long long x) {
  long long a = 998244353 - 2;
  long long ans = 1;
  while (a) {
    if (a & 1) ans = ans * x % 998244353;
    x = x * x % 998244353;
    a >>= 1;
  }
  return ans;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<long long> a(n), w(n);
  long long sum = 0;
  long long x = 0, y = 0;
  for (int i = 0; i < (n); i++) cin >> a[i];
  for (int i = 0; i < (n); i++) {
    cin >> w[i], sum += w[i];
    if (a[i])
      x += w[i];
    else
      y += w[i];
  }
  vector<long long> waru(2 * m + 1, 0);
  for (int i = 0; i < (2 * m + 1); i++)
    if (sum + i - m > 0) waru[i] = inv(sum + i - m);
  vector<long long> dp(2 * m + 1, 0);
  vector<long long> ndp(2 * m + 1, 0);
  dp[m] = 1;
  for (int i = (0); i < (m); i++) {
    for (int j = 0; j < (2 * m + 1); j++) ndp[j] = 0;
    for (int j = (1); j < (2 * m); j++) {
      ndp[j + 1] = (ndp[j + 1] + (x + (i + j - m) / 2) * waru[j] % 998244353 *
                                     dp[j] % 998244353) %
                   998244353;
      ndp[j - 1] = (ndp[j - 1] + (y - (i - j + m) / 2) * waru[j] % 998244353 *
                                     dp[j] % 998244353) %
                   998244353;
    }
    swap(dp, ndp);
  }
  long long aaa = 0, bbb = 0;
  for (int i = 0; i < (2 * m + 1); i++) {
    long long k = (m + i - m) / 2;
    aaa = (aaa + dp[i] * (x + k) % 998244353 * inv(x) % 998244353) % 998244353;
  }
  for (int i = 0; i < (2 * m + 1); i++) {
    long long k = (m - i + m) / 2;
    bbb = (bbb + dp[i] * (y - k) % 998244353 * inv(y) % 998244353) % 998244353;
  }
  for (int i = 0; i < (n); i++) {
    if (a[i]) {
      cout << aaa * w[i] % 998244353 << "\n";
    } else {
      cout << bbb * w[i] % 998244353 << "\n";
    }
  }
  cout << flush;
  return 0;
}
