#include<bits/stdc++.h>
#define ll long long
#define db double
#define M 200006
#define mo 998244353
using namespace std;
bool s1;
char o;
int Read(){
	bool f=1;
	while(!isdigit(o=getchar()))if(o=='-')f=0;
	int res=o^48;
	while(isdigit(o=getchar()))res=(res<<3)+(res<<1)+(o^48);
	return f?res:-res;
}
int n,m,ans,cnt[M][14],len[M],Pow[M<<1],Pow1[M<<1];
bool mark[M];
void Mo(int &a){(a>=mo)&&(a-=mo);}
int fast(int x,int y){
	int res=1;
	while(y){
		if(y&1)res=1ll*res*x%mo;
		y>>=1;
		x=1ll*x*x%mo;
	}
	return res;
}
int C(int a,int b){
	if(a<b)return 0;
	return 1ll*Pow[a]*Pow1[b]%mo*Pow1[a-b]%mo;
}
bool s2;
int main(){
//	printf("%.6lf\n",(&s2-&s1)/1024.0/1024);
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	n=Read(),m=Read();
	for(int i=2;i<=m;++i){
		if(mark[i])continue;
		for(int j=i;j<=m;j+=i){
			mark[j]=1;
			++len[j];
			int a=j;
			while(a%i==0)cnt[j][len[j]]++,a/=i;
		}
	}
	Pow[0]=Pow1[0]=1;
	for(int i=1;i<=n+m;++i)Pow[i]=1ll*Pow[i-1]*i%mo;
	Pow1[n+m]=fast(Pow[n+m],mo-2);
	for(int i=n+m-1;i>=1;--i)Pow1[i]=1ll*Pow1[i+1]*(i+1)%mo;
	for(int i=1;i<=m;++i){
		int res=1;
		for(int j=1;j<=len[i];++j){
			int a=cnt[i][j];
			res=1ll*res*C(n+cnt[i][j]-1,cnt[i][j])%mo;
		}
		Mo(ans+=res);
	}
	printf("%d\n",ans);
	return 0;
}
#include <bits/stdc++.h>

#define fst(t) std::get<0>(t)
#define snd(t) std::get<1>(t)
#define thd(t) std::get<2>(t)
#define unless(p) if(!(p))
#define until(p) while(!(p))

using ll = std::int64_t;
using P = std::tuple<int,int>;

int N;
ll X, Y[60];
ll A[60], B[60];
ll dp[60][10];

ll rec(int i, int c){
    if(i == N - 1){
        return 1;
    }
    
    if(dp[i][c] != -1){
        return dp[i][c];
    }

    ll res = rec(i + 1, (Y[i] + c) / B[i]);
    
    if((Y[i] + c) % B[i] > 0){
        res += rec(i + 1, 1);
    }

    return dp[i][c] = res;
}

int main(){
    std::cin.tie(nullptr);
    std::ios::sync_with_stdio(false);

    std::cin >> N >> X;

    for(int i=0;i<N;++i){
        std::cin >> A[i];
    }

    for(int i=0;i+1<N;++i){
        B[i] = A[i+1] / A[i];
    }

    for(int i=N-1;i>=0;--i){
        Y[i] = X / A[i];
        X %= A[i];
    }

    memset(dp, -1, sizeof(dp));

    ll res = rec(0, 0);
    std::cout << res << std::endl;
}
