#include<bits/stdc++.h>
using namespace std;
int n,w,p,cnt[10005];
priority_queue<int> q[10005];
int main(){
scanf("%d%d",&n,&w);
for (int i=1;i<=n;i++){
scanf("%d",&p);
for (int j=2;j*j<=p;j++)
if (p%j==0){
while (p%j==0) cnt[j]++,p/=j;
q[j].push(-cnt[j]-1);
cnt[j]=0;
}
if (p>1) q[p].push(-2);
}
memset(cnt,0,sizeof cnt);
int w0=w;
for (int i=2;i*i<=w0;i++) while (w0%i==0) cnt[i]++,w0/=i;
if (w0>1) cnt[w0]++;
for (int i=2;i<=10000;i++) for (int j=1;j<=min(n-(int)q[i].size(),cnt[i]);j++) q[i].push(-1);
for (int i=2;i*i<=w;i++) while (w%i==0) q[i].push(q[i].top()-1),q[i].pop(),w/=i;
if (w>1) q[w].push(q[w].top()-1),q[w].pop();
int ans=1;
for (int i=2;i<=10000;i++) while (!q[i].empty()) ans=1ll*ans*(-q[i].top())%998244353,q[i].pop();
printf("%d\n",ans);
return 0;
}