#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
const int inf=0x3f3f3f3f;
const ll mod=998244353;
 
ll n,k;
ll f[3010][3010];
 
int read(){
    int f=1,x=0;
    char ss=getchar();
    while(ss<'0'||ss>'9'){if(ss=='-')f=-1;ss=getchar();}
    while(ss>='0'&&ss<='9'){x=x*10+ss-'0';ss=getchar();}
    return f*x;
}
 
ll calc(int n,int k){
    if (n<k)return 0;
    ll &ret=f[n][k];
    if (ret!=-1)return ret;
    ret=0;
    if (k==0)ret=0;
    else if (n==k)ret=1;
    else if (n==1)ret=1;
    else ret=(calc(n-1,k-1)+calc(n,2*k))%mod;
    return ret;
}
 
int main()
{
    n=read();k=read();
    for (int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=-1;
    printf("%lld\n",calc(n,k));
 
    return 0;
}
#include <bits/stdc++.h>

using namespace std;

#define int long long

int n;

map<pair<int, int>, int> ans;

int solve(vector<int> & a, int x, int st)
{
    if (ans[{x, st}])
    {
        return ans[{x, st}];
    }
    if (st == n - 1)
    {
        return 1;
    }
    if (x % (a[st + 1] / a[st]) == 0)
    {
        int k = (a[st + 1] / a[st]);
        int res = solve(a, x / k, st + 1);
        ans[{x, st}] = res;
        return res;
    }
    int k = (a[st + 1] / a[st]);
    int res = solve(a, x / k, st + 1) + solve(a, x / k + 1, st + 1);
    ans[{x, st}] = res;
    return res;
}

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); srand(clock());
    int x;
    cin >> n >> x;
    vector<int> a(n);
    for (int i = 0; i < n; ++i)
    {
        cin >> a[i];
    }
    cout << solve(a, x, 0) << endl;
    return 0;
}
