P9836
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4+10;
int n, w;
long long ans = 1;
const long long m =998244353;
int ma[maxn];
struct tree{
int h, d;
}p[maxn];
bool cmp(tree a, tree b) {
return a.d < b.d;
}
int sol1(int a) {
int ans = 0;
for(int i = 1;i<= a;i++) {
if(a % i == 0) ans++;
}
return ans;
}
int main() {
scanf("%d%d", &n, &w);
for(int i =1; i<= n; i++){
scanf("%d", &p[i].h);
if(ma[p[i].h] != 0) p[i].d = ma[p[i].h];
else {
p[i].d = sol1(p[i].h);
ma[p[i].h] = p[i].d;
}
}
struct tree bit[w];
int cnt = 0;
for(int i = 1; i<=w;i++){
if(w % i == 0) {
++cnt;
bit[cnt].h = i;
if(ma[bit[cnt].h] != 0) bit[cnt].d = ma[bit[cnt].h];
else
bit[cnt].d = sol1(i);
}
}
sort(p+1, p+n +1, cmp);
sort(bit + 1, bit+ cnt+1, cmp);
int j = 1;
for(int i = cnt; i>=1;i--) {
if(w == 1)break;
if(bit[i].h > w) continue;
p[j].d *= bit[i].d % m;
w /= bit[i].h;
if(p[j].d > p[j+1].d) j++;
}
for(int i = 1; i<=n; i++)
ans = ans * (p[i].d) % m;
cout << ans << endl;
return 0;
}