#include <bits/stdc++.h>
using namespace std;
#define deb(k) cerr << #k << ": " << k << "\n";
#define size(a) (int)a.size()
#define fastcin cin.tie(0)->sync_with_stdio(0);
#define st first
#define nd second
#define pb push_back
#define mk make_pair
#define int long long
typedef long double ldbl;
typedef double dbl;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef map<int, int> mii;
typedef vector<int> vint;
#define MAXN 300100
#define MAXLG 20
const int inf = 0x3f3f3f3f;
const ll mod = 1000000007;
const ll linf = 0x3f3f3f3f3f3f3f3f;
const int N = 300100;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

long double x, y, r;
bool check(long double a, long double b){
	return sqrt((a-x)*(a-x) + (b-y)*(b-y)) <= r + 1e-14;
}

void solve(){
	cin>>x>>y>>r;
	int lo = x-r-10;
	int hi = x+r+10;
	int ans = 0;
	for(int i=lo;i<=hi;i++){
		if(!check(i, y)) continue;
		long double j = i;
		long double val = r*r - (j-x)*(j-x) + 0.1;
		int down = -sqrt(val) + y - 10;
		int up = sqrt(val) + y + 10;
		while(down <= up && !check(j, down)) down++;
		while(down <= up && !check(j, up)) up--;
		if(down > up) continue;
		//cout<<i<<" "<<up<<" "<<down<<"\n";
		ans += up - down + 1;
	}
	cout<<ans<<"\n";




	// Have you read the problem again?
	// Maybe you understood the wrong problem
}

int32_t main(){
	fastcin;
	int t_ = 1;
	//cin>>t_;
	while(t_--)
		solve();
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int maxn=222222,mod=998244353;
#define MP make_pair
#define PB push_back
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline ll read(){
	char ch=getchar();ll x=0,f=0;
	while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();
	while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
	return f?-x:x;
}
int n,m,k,a[maxn],b[maxn],ans;
inline int qpow(int a,int b){
	int ans=1;
	for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) ans=1ll*ans*a%mod;
	return ans;
}
int main(){
	n=read();m=read();k=read();
	if(n==1){
		printf("%d\n",qpow(k,m));
		return 0;
	}
	if(m==1){
		printf("%d\n",qpow(k,n));
		return 0;
	}
	FOR(i,1,k) a[i]=qpow(i,n);
	FOR(i,1,k) b[i]=qpow(k-i+1,m);
	ROF(i,k,2) a[i]=(a[i]-a[i-1]+mod)%mod;
	FOR(i,1,k) ans=(ans+1ll*a[i]*b[i])%mod;
	printf("%d\n",ans);
}