#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
long long n,w,a[100005],num[12500],numw[12500],cnt=0,ans=1;
bool vis[100005];
long long x[12500];
priority_queue<long long,vector<long long>,greater<long long>>q[12500];
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>w;
for(long long i=2;i<=10500;i++){
if(vis[i]==false){
cnt++;
num[cnt]=i;
}
for(long long j=1;j<=cnt&&i*num[j]<=10500;j++){
vis[i*num[j]]=true;
if(i%num[j]==0) break;
}
}
for(long long i=1;i<=n;i++){
cin>>a[i];
for(long long j=1;j<=cnt;j++){
while(a[i]%num[j]==0){
x[j]++;
a[i]/=num[j];
}
q[j].push(x[j]+1);
}
}
for(long long j=1;j<=cnt;j++){
if(w==1) break;
while(w%num[j]==0){
numw[j]++;
w=w/num[j];
}
}
for(long long i=1;i<=cnt;i++){
for(long long j=1;j<=numw[i];j++){
long long g=q[i].top();
q[i].pop();
q[i].push(g+1);
}
}
for(long long i=1;i<=cnt;i++){
while(!q[i].empty()){
ans=(ans*q[i].top())%mod;
q[i].pop();
}
}
cout<<ans<<endl;
return 0;
}