#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e4+10;
const ll mod=998244353;
int n,m;
int a[maxn],prime[2000];
bool isp[maxn];
ll mut;
ll pmin[maxn][5],vis[maxn];
ll q_pow(ll a,ll b){
ll ans=1ll;
while(b){
if(b%2==1){
ans=(ans*a)%mod;
}
a=(a*a)%mod;
b/=2ll;
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
memset(pmin,0x3f,sizeof(pmin));
isp[1]=1;
int cnt=0;
for(int i=2;i<=10000;i++){
pmin[i][1]=1;
vis[i]=0;
if(!isp[i]) prime[++cnt]=i;
for(int j=2;j<=i&&i*j<=10000;j++) isp[i*j]=1;
}
bool fg=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]>1) fg=1;
}
if(!fg){
printf("%d",1);
return 0;
}
mut=1ll;
for(int i=1;i<=n;i++){
for(int j=1;prime[j]<=a[i];j++){
ll cnt1=1;
while(a[i]>1&&a[i]%prime[j]==0){
a[i]/=prime[j];
cnt1++;
}
if(cnt1==1) continue;
if(!vis[prime[j]]) vis[prime[j]]++,pmin[prime[j]][1]=cnt1;
else{
vis[prime[j]]++;
if(pmin[prime[j]][1]>=cnt1){
pmin[prime[j]][2]=pmin[prime[j]][1];
pmin[prime[j]][1]=cnt1;
}
else pmin[prime[j]][2]=min(pmin[prime[j]][2],cnt1);
}
mut=(mut*cnt1)%mod;
}
}
for(int j=1;prime[j]<=m;j++){
ll cnt1=1ll;
while(m>1&&m%prime[j]==0){
m/=prime[j];
cnt1++;
}
if(cnt1==1ll) continue;
if(vis[prime[j]]!=n) mut=(mut*cnt1)%mod;
else{
cnt1--;
while(cnt1--){
mut=(mut+(mut*q_pow(pmin[prime[j]][1],mod-2))%mod)%mod;
pmin[prime[j]][1]++;
if(pmin[prime[j]][2]<pmin[prime[j]][1]) swap(pmin[prime[j]][2],pmin[prime[j]][1]);
}
}
}
printf("%lld",mut);
return 0;
}