#include <bits/stdc++.h>
using namespace std;
long long dp[1010000];
long long mpow(long long x, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * x % 998244353;
    x = x * x % 998244353;
    n >>= 1;
  }
  return ans;
}
long long inv(long long x) { return mpow(x, 998244353 - 2); }
int n, m;
long long a[1010000];
int b[1010000];
long long sum[2];
long long ans[2];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> b[i];
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    sum[b[i]] += a[i];
  }
  dp[0] = 1;
  for (int i = 0; i < m; i++)
    for (int j = i; j >= 0; j--) {
      if (i - j <= sum[0]) {
        long long sum0 = sum[0] - (i - j);
        long long sum1 = sum[1] + j;
        dp[j + 1] += dp[j] * sum1 % 998244353 * inv(sum0 + sum1) % 998244353;
        dp[j] = dp[j] * sum0 % 998244353 * inv(sum0 + sum1) % 998244353;
      }
    }
  for (int i = 0; i <= m; i++) {
    ans[0] += (sum[0] - (m - i)) * dp[i] % 998244353;
    ans[1] += (sum[1] + i) * dp[i] % 998244353;
  }
  for (int i = 1; i <= n; i++)
    cout << (ans[b[i]] * a[i] % 998244353 * inv(sum[b[i]]) % 998244353 +
             998244353) %
                998244353
         << endl;
  return ~~(0 ^ 0 ^ 0);
}
