#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ff first
#define se second
#define pb push_back
#define nn 510
#define mp make_pair
#define ll long long int
#define db double
#define ldb long double
#define inf 1000000000000000000ll
#define logn 20
#define mod 998244353ll
#define mod1 mod
#define mod2 100000009ll
#define eps 1e-16
#define endl '\n'
#define yes "YES"
#define no "NO"
 
using namespace std;
using namespace __gnu_pbds;

typedef pair<int,int> pii;
typedef pair<ll,int> pli;
typedef pair<int,ll> pil;
typedef pair<ll,ll> pll;
typedef pair<long double,long double>pdd;
template<class T>
using max_pq = priority_queue<T>;
template<class T>
using min_pq = priority_queue<T,vector<T>,greater<T>>;
template<class T>
using OST = tree<T, null_type, less<T>, rb_tree_tag, 
tree_order_statistics_node_update>;

ll pow(ll a,ll p,ll m=mod)
{ll res=1;while(p>0){if(p&1)res=(res*a)%m;a=(a*a)%m;p>>=1;}
return res;}

const ldb pi=3.141592653589793238462643383;

ll nr[nn], dp[nn][nn], n, k;

ll solve(int i, int s, int j) {
    if(i == n) return 0;
    if(dp[i][s] != -1) return dp[i][s];
}

int main()
{
    ios_base::sync_with_stdio(0);
    #ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    cin >> n >> k;
    ll s = 0;
    for(int i = 1; i <= n; i++) {
        queue<ll>q;ll sum = 1;
        for(int j = 1; j <= n; j++) {
            nr[i] = sum;
            q.push(nr[i]);
            sum = (sum + nr[i]) % mod;
            if(q.size() >= i) {
                sum = (sum - q.front() + mod) % mod;
                q.pop();
            }
        }
        nr[i] = (nr[i] * 2) % mod;
        nr[i] = (nr[i] - nr[i - 1] + mod) % mod;
    }
    ll ans = 0;
    for(int j = 1; j <= min(n, k); j++) {
        dp[0][1] = nr[j];
        for(int i = 1; i < n; i++) {
            ll sum = dp[i - 1][1];
            for(int s = min(i + 1ll, k / j); s > 1; s--) {
                dp[i][s] = dp[i - 1][s - 1];
                sum += dp[i - 1][s];
                sum %= mod;
                //cout << i << ' ' << s << ' ' << dp[i][s] << endl;
            }
            dp[i][1] = sum;
        }
        for(int i = 1; i <= n; i++) 
            ans = (ans + dp[n - 1][i])%mod;
        memset(dp, 0, sizeof dp);
    }
    cout << ans << endl;
    return 0;
}