#include<bits/stdc++.h>
#define FILE "read"
#define MAXN 5050
using namespace std;
const int mod=998244353;
int n,m,N,a[MAXN],inv[MAXN],fac[MAXN],cnt[MAXN],f[MAXN];
inline int read(){
int x=0,f=1; char ch=getchar();
while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
inline int add(int a,int b){return (a+=b)>=mod?a-mod:a;}
inline int sub(int a,int b){return (a-=b)<0?a+mod:a;}
inline int mul(int a,int b){return 1LL*a*b%mod;}
inline int fast(int a,int b){int ret(1);for(;b;b>>=1,a=mul(a,a))if(b&1)ret=mul(ret,a);return ret;}
void pre(){
N=5000; fac[0]=1;
for(int i=1;i<=N;++i) fac[i]=mul(fac[i-1],i);
inv[N]=fast(fac[N],mod-2);
for(int i=N-1;i>=0;--i) inv[i]=mul(inv[i+1],i+1);
}
int main(){
n=read(); m=read(); pre();
for(int i=1;i<=n;++i) a[i]=read();
for(int i=1;i<=n;++i) cnt[a[i]]++;
for(int i=1;i<=N;++i) cnt[i]+=cnt[i-1];
sort(a+1,a+n+1); f[m]=mul(fac[n],inv[cnt[m]]);
for(int j=m;j>=0;--j)if(f[j]){
for(int k=1;k<=n&&a[k]<=j;++k){
f[j%a[k]]=add(f[j%a[k]],mul(f[j],mul(fac[cnt[j]-1],inv[cnt[j%a[k]]])));
}
}
int ans=a[1]-1;
while(!f[ans]) --ans;
printf("%d\n%d\n",ans,f[ans]);
return 0;
}