#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 11451
#define int long long
#define p 998244353
using namespace std;
int n,w,m;
int a[2005][N];
int id[N],prime[N];
bool vis[N];
inline void prrrr(int nn){
memset(vis,0,sizeof(vis));
m=0;
vis[1]=1;
for(int i=2;i<=nn;i++){
if(vis[i]==0){
prime[++m]=i;
id[i]=m;
}
for(int j=1;j<=m&&i*prime[j]<=nn;j++){
vis[i*prime[j]]=1;
if((i%prime[j])==0)break;
}
}
}
signed main(){
prrrr(N-1);
scanf("%lld%lld",&n,&w);
for(int i=1;i<=n;i++){
int x;
scanf("%lld",&x);
int now=2;
for(int j=1;j<=m;j++)a[j][i]++;
while(x>1){
if(x%now){
now++;
continue;
}
x/=now;
a[id[now]][i]++;
}
}
int ans=1;
for(int i=1;i<=m;i++){
if(w%prime[i])continue;
sort(a[i]+1,a[i]+n+1);
int cnt=0;
while(w%prime[i]==0){
cnt++;
w/=prime[i];
}
for(int j=1;j<=n;j++){
if(cnt==0)break;
while(a[i][j]<=a[i][j+1]&&cnt>0)a[i][j]++,cnt--;
}
for(int j=1;j<=n;j++)ans=(ans*a[i][j])%p;
}
printf("%lld",ans);
return 0;
}