#include <bits/stdc++.h>
// #include <atcoder/all>
// using namespace atcoder;
#define _overload3(_1,_2,_3,name,...) name
#define _rep(i,n) repi(i,0,n)
#define repi(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload3(__VA_ARGS__,repi,_rep,)(__VA_ARGS__)
#define all(x) x.begin(),x.end() 
#define SZ(x) ((int)(x).size())
#define PB push_back
#define MP make_pair
#define V vector
#define P pair<int,int>
#define F first
#define S second
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
using ll = long long;
using ld = long double;
using namespace std;
const int INF =1001001001;
const int MAX = 2e6+1;


ll in(){
    double x;
    cin>>x;
    x*=10000;
    return round(x);
}

int main() {
    ll x=in();
    ll y=in();
    ll r=in();
    x%=10000;
    y%=10000;
    ll ans=0;
    ll rr=r*r;
    ll y1=(y/10000)*10000;
    ll y2=y1+10000;
    ll right=0,left=0;

    while((x-right)*(x-right)+(y-y1)*(y-y1)<=rr){
        right+=10000;
    }
    while((x-left)*(x-left)+(y-y1)*(y-y1)<=rr){
        left-=10000;
    }
    while(y1>=y-r){
        while((x-right)*(x-right)+(y-y1)*(y-y1)>rr){
            right-=10000;
        }
        while((x-left)*(x-left)+(y-y1)*(y-y1)>rr){
            left+=10000;
        }
        if(right>=left)
        ans+=(right-left+10000)/10000;
        y1-=10000;
    }

    right=0;left=0;
    while((x-right)*(x-right)+(y-y2)*(y-y2)<=rr){
        right+=10000;
    }
    while((x-left)*(x-left)+(y-y2)*(y-y2)<=rr){
        left-=10000;
    }
    while(y2<=y+r){
        while((x-right)*(x-right)+(y-y2)*(y-y2)>rr){
            right-=10000;
        }
        while((x-left)*(x-left)+(y-y2)*(y-y2)>rr){
            left+=10000;
        }
        if(right>=left)
        ans+=(right-left+10000)/10000;
        y2+=10000;
    }


    cout<<ans<<endl;
}
#include <bits/stdc++.h>

template <typename T> inline void rd(T& x) {
	int si = 1; char c = getchar(); x = 0;
	while(!isdigit(c)) si = c == '-' ? -1 : si, c = getchar();
	while(isdigit(c)) x = x * 10 + c - 48, c = getchar();
	x *= si;
}
template <typename T, typename... Args>
inline void rd(T& x, Args&... args) { rd(x); rd(args...); }
#define fi first
#define se second
#define mkp std::make_pair
typedef long long ll;
typedef double ff;
typedef std::pair <int, int> pii;
const int N = 1e5 + 5, B = 14, Inf = 0x3f3f3f3f, Mod = 998244353;
const ll InfLL = 0x3f3f3f3f3f3f3f3fLL;

int QPow(int a, int b) {
	int ret = 1, bas = a;
	for(; b; b >>= 1, bas = 1LL * bas * bas % Mod)
		if(b & 1) ret = 1LL * ret * bas % Mod;
	return ret;
}

int n, m, f[B][N], fac[N], fac_inv[N];
void Init() {
	fac[0] = 1;
	for(int i = 1; i <= n; ++i) fac[i] = 1LL * fac[i - 1] * i % Mod;
	fac_inv[n] = QPow(fac[n], Mod - 2);
	for(int i = n - 1; ~i; --i) fac_inv[i] = 1LL * fac_inv[i + 1] * (i + 1) % Mod;
}
int C(int x, int y) {
	return 1LL * fac[x] * fac_inv[x - y] % Mod * fac_inv[y] % Mod;
}
void Calc() {
	f[0][0] = 1;
	for(int i = 1; i < B; ++i) {
		for(int j = 0; j <= m; ++j) {
			for(int k = 0; k * (1 << (i - 1)) <= j && k <= n; k += 2) 
				f[i][j] = (1LL * f[i - 1][j - k * (1 << (i - 1))] * C(n, k) + f[i][j]) % Mod;
		}
	}
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("a.in", "r", stdin);
	freopen("a.out", "w", stdout);
#endif
	int test_case_cnt = 1; //rd(test_case_cnt);
	while(test_case_cnt--) {
		rd(n, m); Init(); Calc();
		printf("%d\n", f[B - 1][m]);
	} return 0;
}