#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 998244353;
using namespace std;
namespace Poly
{
int qpow(int a,int b)
{
int res = 1;
while(b)
{
if(b & 1)res = res * a % mod;
a = a * a % mod;b >>= 1;
}
return res;
}
void Der(int *f,int *g,int len)
{
for(int i = 0;i < len;i++)g[i] = f[i + 1] * (i + 1) % mod;
g[len - 1] = 0;
}
void Int(int *f,int *g,int len)
{
for(int i = 1;i < len;i++)g[i] = f[i - 1] * qpow(i,mod - 2) % mod;
g[0] = 0;
}
void FFT(int *a,int x,int K)
{
static int rev[maxn],lst;
int n = 1 << x;
if(n != lst)
{
for(int i = 0;i < n;i++)rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << x - 1);
lst = n;
}
for(int i = 0;i < n;i++)if(i < rev[i])swap(a[i],a[rev[i]]);
for(int i = 1;i < n;i <<= 1)
{
int tmp = i << 1,wn = qpow(3,(mod - 1) / tmp);
if(K == -1)wn = qpow(wn,mod-2);
for(int j = 0;j < n;j += tmp)
{
int w = 1;
for(int k = 0;k < i;k++,w = w * wn % mod)
{
int x = a[j + k],y = w * a[i + j + k] % mod;
a[j + k] = (x + y) % mod;a[i + j + k] = (x - y + mod) % mod;
}
}
}
if(K == -1)
{
int inv = qpow(n,mod - 2);
for(int i = 0;i < n;i++)a[i] = a[i] * inv % mod;
}
}
void Inv(int *f,int *g,int len)
{
static int A[maxn];
if(len == 1)return g[0] = qpow(f[0],mod - 2),void();
Inv(f,g,len >> 1);copy(f,f + len,A);
int x = log2(len << 1),n = 1 << x;
fill(A + len,A + n,0);fill(g + (len >> 1),g + n,0);
FFT(A,x,1);FFT(g,x,1);
for(int i = 0;i < n;i++)g[i] = (mod + 2 - A[i] * g[i] % mod) * g[i] % mod;
FFT(g,x,-1);fill(g + len,g + n,0);
}
const int inv2 = (mod + 1) / 2;
void Sqrt(int *f,int *g,int len)
{
static int A[maxn],B[maxn];
if(len == 1)return g[0] = sqrt(f[0]),void();
Sqrt(f,g,len >> 1);Inv(g,B,len);
copy(f,f + len,A);
int x = log2(len << 1),n = 1 << x;
fill(A + len,A + n,0);fill(B + len,B + n,0);
fill(g + (len >> 1),g + n,0);
FFT(A,x,1);FFT(B,x,1);FFT(g,x,1);
for(int i = 0;i < n;i++)g[i] = (g[i] + A[i] * B[i] % mod) % mod * inv2 % mod;
FFT(g,x,-1);fill(g + len,g + n,0);
}
void Ln(int *f,int *g,int len)
{
static int A[maxn],B[maxn];
Der(f,A,len),Inv(f,B,len);
int x = log2(len << 1),n = 1 << x;
fill(A + len,A + n,0);fill(B + len,B + n,0);
FFT(A,x,1);FFT(B,x,1);
for(int i = 0;i < n;i++)A[i] = A[i] * B[i] % mod;
FFT(A,x,-1);Int(A,g,len);
}
void Exp(int *f,int *g,int len)
{
static int A[maxn];
if(len == 1)return g[0] = 1,void();
int x = log2(len << 1),n = 1 << x;
Exp(f,g,len >> 1);
fill(A + len,A + n,0);fill(g + (len >> 1),g + n,0);
Ln(g,A,len);
A[0] = (f[0] + 1 - A[0] + mod) % mod;
for(int i = 1;i < len;i++)A[i] = (f[i] - A[i] + mod) % mod;
FFT(A,x,1);FFT(g,x,1);
for(int i = 0;i < n;i++)g[i] = g[i] * A[i] % mod;
FFT(g,x,-1);fill(g + len,g + n,0);
}
void Pow(int *f,int len,int k)
{
static int A[maxn];
Ln(f,A,len);
for(int i = 0;i < len;i++)A[i] = A[i] * k % mod;
Exp(A,f,len);
}
}using namespace Poly;
int n,m,cnt[maxn];
int A[maxn],B[maxn];
int inv[maxn];
void init(int n)
{
inv[1] = 1;
for(int i = 2;i < n;i++)inv[i] = -(mod / i) * inv[mod % i] % mod;
}
signed main()
{
cin >> n >> m;init(maxn);
for(int i = 1;i <= n;i++)
{
int v;cin >> v;
cnt[v]++;
}
for(int i = 1;i <= m;i++)
{
if(cnt[i])
{
for(int j = 1;j <= m / i;j++)A[i * j] = (A[i * j] + cnt[i] * inv[j]) % mod;
}
}
Exp(A,B,m + 1);
for(int i = 1;i <= m;i++)cout << (B[i] % mod + mod) % mod << '\n';
return 0;
}