#include <bits/stdc++.h>
using namespace std;
inline int read() {
  char c = getchar();
  int x = 0, f = 1;
  while ((c < '0' || c > '9') && c ^ '-') c = getchar();
  if (c == '-') f = -1, c = getchar();
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + c - 48;
    c = getchar();
  }
  return x * f;
}
const int N = 1e5 + 10;
const int mo = 998244353, Gi = 3;
int rev[N << 2], b[N << 2], g[N << 2], f[N << 2], n, m;
inline int qumo(int x) { return x + ((x >> 31) & mo); }
int kg[N << 2];
inline int qp(int x, int y) {
  int ans = 1;
  while (y) {
    if (y & 1) ans = 1ll * ans * x % mo;
    x = 1ll * x * x % mo;
    y >>= 1;
  }
  return ans;
}
int lim, l;
inline void ntt(int d[], int pan) {
  for (int i = 0; i < lim; i++)
    if (i > rev[i]) swap(d[i], d[rev[i]]);
  for (int bj = 1; bj < lim; bj <<= 1) {
    int wn = qp(Gi, (mo - 1) / (bj << 1));
    if (pan) wn = qp(wn, mo - 2);
    for (int ks = 0; ks < lim; ks += (bj << 1)) {
      int w = 1;
      for (int i = 0; i < bj; i++, w = 1ll * w * wn % mo) {
        int x = d[ks + i], y = 1ll * w * d[ks + bj + i] % mo;
        d[ks + i] = qumo(x + y - mo);
        d[ks + bj + i] = qumo(x - y);
      }
    }
  }
  if (pan) {
    const int ni = qp(lim, mo - 2);
    for (int i = 0; i < lim; i++) d[i] = 1ll * d[i] * ni % mo;
  }
}
int tmp[N << 2];
const int inv2 = qp(2, mo - 2);
inline void qiuni(int dao) {
  b[0] = qp(kg[0], mo - 2);
  for (int i = 1; i < dao; i++) b[i] = 0;
  int lao = 1;
  while (lao < dao) {
    int xin = lao << 1;
    lim = 1, l = 0;
    while (lim <= (xin + lao) - 2) lim <<= 1, l++;
    for (int i = 1; i < lim; i++)
      rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l - 1), tmp[i] = 0;
    tmp[0] = 0;
    for (int i = 0; i < xin; i++) tmp[i] = kg[i];
    ntt(b, 0);
    ntt(tmp, 0);
    for (int i = 0; i < lim; i++) tmp[i] = 1ll * b[i] * b[i] % mo * tmp[i] % mo;
    ntt(tmp, 1);
    ntt(b, 1);
    for (int i = 0; i < lim; i++) b[i] = qumo(qumo((b[i] << 1) - mo) - tmp[i]);
    for (int i = xin; i < lim; i++) b[i] = 0;
    lao = xin;
  }
}
inline void solve() {
  for (int i = 0; i <= m; i++) {
    g[i] = qumo(-g[i]);
    g[i] = qumo((g[i] << 1) - mo);
    g[i] = qumo((g[i] << 1) - mo);
  }
  g[0] = qumo(1 + g[0] - mo);
  kg[0] = 1;
  int lao = 1;
  qiuni(lao);
  while (lao < m + 1) {
    int xin = lao << 1;
    qiuni(xin);
    lim = 1, l = 0;
    while (lim <= (lao << 1) - 2) lim <<= 1, l++;
    for (int i = 1; i < lim; i++)
      rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l - 1);
    ntt(kg, 0);
    for (int i = 0; i < lim; i++) kg[i] = 1ll * kg[i] * kg[i] % mo;
    ntt(kg, 1);
    for (int i = 0; i < xin; i++) kg[i] = qumo(kg[i] + g[i] - mo);
    for (int i = xin; i < lim; i++) kg[i] = 0;
    lim = 1, l = 0;
    while (lim <= xin + lao - 2) lim <<= 1, l++;
    for (int i = 1; i < lim; i++)
      rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l - 1);
    ntt(b, 0);
    ntt(kg, 0);
    for (int i = 0; i < lim; i++) kg[i] = 1ll * kg[i] * b[i] % mo;
    ntt(b, 1);
    ntt(kg, 1);
    for (int i = 0; i < lim; i++) kg[i] = 1ll * kg[i] * inv2 % mo;
    for (int i = xin; i < lim; i++) kg[i] = 0;
    lao = xin;
  }
  memset(b, 0, sizeof(b));
  kg[0] = qumo(1 + kg[0] - mo);
  for (int i = m + 1; i < lao; i++) kg[i] = 0;
  b[0] = qp(kg[0], mo - 2);
  lao = 1;
  while (lao < m + 1) {
    int xin = lao << 1;
    lim = 1, l = 0;
    while (lim <= (xin + lao - 2)) lim <<= 1, l++;
    for (int i = 1; i < lim; i++)
      rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l - 1), tmp[i] = 0;
    tmp[0] = 0;
    for (int i = 0; i < xin; i++) tmp[i] = kg[i];
    ntt(b, 0);
    ntt(tmp, 0);
    for (int i = 0; i < lim; i++) tmp[i] = 1ll * b[i] * b[i] % mo * tmp[i] % mo;
    ntt(b, 1);
    ntt(tmp, 1);
    for (int i = 0; i < lim; i++) b[i] = qumo(qumo((b[i] << 1) - mo) - tmp[i]);
    for (int i = xin; i < lim; i++) b[i] = 0;
    lao = xin;
  }
}
int main() {
  n = read();
  m = read();
  for (int i = 1; i <= n; i++) g[read()] = 1;
  for (int i = m + 1; i <= N - 10; i++) g[i] = 0;
  solve();
  for (int i = 1; i <= m; i++) cout << qumo((b[i] << 1) - mo) << "\n";
  return 0;
}
