#include <bits/stdc++.h>
using namespace std;
using namespace std;
int n, m;
long long bm(long long base, int power) {
  if (power == 0) {
    return 1;
  }
  if (power % 2 == 0) {
    long long ret = bm(base, power / 2);
    return (ret * ret) % 998244353;
  } else {
    return (base * bm(base, power - 1)) % 998244353;
  }
}
long long mod_inv(long long num) { return bm(num, 998244353 - 2); }
int dp[2560][110][60];
bool foo;
int init_pos_wei = 0;
int init_neg_wei = 0;
long long func_pos(long long pos_wei, long long cur_wei, int vis) {
  long long pos_used = (pos_wei + cur_wei - init_pos_wei);
  long long neg_used = vis - pos_used;
  long long neg_wei = init_neg_wei - neg_used;
  if (vis == m) {
    return cur_wei;
  }
  if (dp[pos_wei][cur_wei][vis] != -1) {
    return dp[pos_wei][cur_wei][vis];
  }
  long long ans = 0;
  long long all = pos_wei + neg_wei + cur_wei;
  if (cur_wei) {
    ans += (((cur_wei * mod_inv(all)) % 998244353) *
            func_pos(pos_wei, cur_wei + 1, vis + 1)) %
           998244353;
  }
  if (pos_wei) {
    ans += (((pos_wei * mod_inv(all)) % 998244353) *
            func_pos(pos_wei + 1, cur_wei, vis + 1)) %
           998244353;
  }
  if (neg_wei) {
    ans += (((neg_wei * mod_inv(all)) % 998244353) *
            func_pos(pos_wei, cur_wei, vis + 1)) %
           998244353;
  }
  ans %= 998244353;
  return dp[pos_wei][cur_wei][vis] = ans;
}
long long func_neg(long long neg_wei, long long cur_wei, int vis) {
  long long neg_used = init_neg_wei - (neg_wei + cur_wei);
  long long pos_used = vis - neg_used;
  long long pos_wei = init_pos_wei + pos_used;
  if (vis == m) {
    return cur_wei;
  }
  if (dp[neg_wei][cur_wei][vis] != -1) {
    return dp[neg_wei][cur_wei][vis];
  }
  long long ans = 0;
  long long all = pos_wei + neg_wei + cur_wei;
  if (cur_wei) {
    ans += (((cur_wei * mod_inv(all)) % 998244353) *
            func_neg(neg_wei, cur_wei - 1, vis + 1)) %
           998244353;
  }
  if (pos_wei) {
    ans += (((pos_wei * mod_inv(all)) % 998244353) *
            func_neg(neg_wei, cur_wei, vis + 1)) %
           998244353;
  }
  if (neg_wei) {
    ans += (((neg_wei * mod_inv(all)) % 998244353) *
            func_neg(neg_wei - 1, cur_wei, vis + 1)) %
           998244353;
  }
  ans %= 998244353;
  return dp[neg_wei][cur_wei][vis] = ans;
}
int res[60];
bool is_like[60];
int wei[60];
int main() {
  cin >> n >> m;
  for (int i = 0; i <= n - 1; i++) {
    cin >> is_like[i];
  }
  for (int i = 0; i <= n - 1; i++) {
    cin >> wei[i];
    if (is_like[i]) {
      init_pos_wei += wei[i];
    } else {
      init_neg_wei += wei[i];
    }
  }
  memset((dp), -1, sizeof(dp));
  for (int i = 0; i <= n - 1; i++) {
    if (is_like[i]) {
      res[i] = func_pos(init_pos_wei - wei[i], wei[i], 0);
    }
  }
  memset((dp), -1, sizeof(dp));
  for (int i = 0; i <= n - 1; i++) {
    if (!is_like[i]) {
      res[i] = func_neg(init_neg_wei - wei[i], wei[i], 0);
    }
  }
  for (int i = 0; i <= n - 1; i++) {
    cout << res[i] << "\n";
  }
  return 0;
}
