#include <bits/stdc++.h>
using namespace std; 
#define all(c) c.begin(),c.end()
#define sz(x) int(x.size())
#define ar array
typedef long long ll ; 
typedef vector<int> vi;
#define mod 1000000007
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll exp(ll x,ll y){
  x%=mod;
  ll res=1;
  while(y){
    if(y&1)
    res=res*x%mod;
    x=x*x%mod;
    y>>=1;
  }
  return res;
}
ll fact(ll n){
  ll res=1;
  for(ll i=2;i<=n;i=i+1)
  (res*=i)%=mod;
  return res;
}
bool isprime(ll n){
  if(n<=1) return 0;
  for(ll i=2;i*i<=n;++i)
  if(n%i==0) return 0;
  return 1;
}

int main() {
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,k;
cin>>n>>k;
int sum=0;
for(int i=1;i<=n;++i){
  for(int j=1;j<=k;++j) sum+=i*100+j;
}
cout<<sum;
return 0;
}
#include <cmath>
#include <deque>
#include <algorithm>
#include <iterator>
#include <list>
#include <tuple>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <unordered_set>
#include <stack>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <functional>
#include <numeric>
#include <iomanip> 
#include <stdio.h>
//end of libraries
#define lnf 3999999999999999999
#define inf 999999999
#define PI 3.14159265359
#define endl "\n"
#define fi first
#define se second
#define pb push_back
#define ll long long
#define all(c) (c).begin(),(c).end()
#define sz(c) (int)(c).size()
#define mkp(a,b) make_pair(a,b)
#define make_unique(a) sort(all(a)),a.erase(unique(all(a)),a.end())
#define rsz(a,n) a.resize(n)
#define pii pair <int,int>
#define rep(i,n) for(int i = 0 ; i < n ; i++) 
#define drep(i,n) for(int i = n-1 ; i >= 0 ; i--)
#define crep(i,x,n) for(int i = x ; i < n ; i++)
#define fcin ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);

const int max_n = 5500;

using namespace std;
ll mod = 998244353 , fact[max_n];
ll binpow(ll a, ll b) {  
  a %= mod; ll res = 1; 
  while (b) { if (b%2) res = res * a % mod; a = a * a % mod; b /= 2; } 
  return res % mod;
}
void dofact() {
  fact[0]=fact[1]=1;
  rep(i,max_n-3){
    if(i>1)fact[i] = fact[i-1]*i; fact[i] %= mod;
  }
}

ll cnk(ll k , ll n){
  if(k>n) return 0;
  return (fact[n] * binpow(fact[k]*fact[n-k]%mod,mod-2)) % mod;
}
ll sub(ll a , ll b){
  a%=mod; b%=mod;
  return (((a-b)%mod)+mod)%mod;
}
ll prod(ll a , ll b){
  a%=mod; b%=mod;
  return ((a*b)%mod);
}

ll add(ll a , ll b){
  a%=mod; b%=mod;
  return (a+b)%mod;
}

ll dp[max_n] , nedp[max_n];

vector <ll> a;

int n,m;

void read() {
	cin >> n >> m;
	int x = 1;
	while(x<=m) {
		a.pb(x);
		x*=2;
	}
}

int main(){
fcin;
dofact();
	
	read();

	dp[0] = 1;

	rep(idx,sz(a)){
		int i = a[idx];
		rep(j,m+1) nedp[j]=dp[j]; 
		for(int j = 0 ; j <= m ; j++) {
			if(dp[j]==0) continue;
			int x = 2;
			while(j+x*i <= m) {
				int nxt = j+x*i;
				nedp[nxt] = add(nedp[nxt],prod(dp[j],cnk(x,n)));	
				x+=2;
			}
		}
		rep(j,m+1) dp[j] = nedp[j];
		// rep(j,m+1) {
		// 	cout << dp[j] << " ";
		// }cout << "\n";
	}

	cout << dp[m] << "\n";
/*
*/

    return 0;   
}
