#include <bits/stdc++.h>
using namespace std;

using ll = long long int;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef pair<ll,ll> ii;
typedef vector<ii> vii;
typedef vector<vii> vvii;
#define F first
#define S second

ll min(ll x, ll y){
    return ((x < y) ? x : y);
}

ll max(ll x, ll y){
    return ((x > y) ? x : y);
}

const ll MOD = 998244353;

ll modpow (ll b, ll e){
    ll ans = 1;
    while (e){
        if (e%2) ans *= b;
        ans %= MOD;
        b *= b; b %= MOD;
        e /= 2;
    }
    return ans;
}

int main(){
    ll n,m,k;
    cin >> n >> m >> k;
    ll ans = 0;
    if (n == 1){
        cout << modpow(k,m) << endl;
    }else if (m == 1){
        cout << modpow(k,n) << endl;
    }else{
        for (ll i = 1; k >= i; i++){
            ll mins = modpow(i,n);
            mins -= modpow(i-1,n);

            mins += MOD; mins %= MOD;

            ll maxs = modpow(k-i+1,m);

            //cout << mins << " " << maxs << endl;

            ans += (mins*maxs); ans %= MOD;
        }
        cout << ans << endl;
    }

}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

double X, Y, R;

bool inside(ll x, ll y) {
    const int LARGE = 10000;
    x *= LARGE;
    y *= LARGE;
    ll XX = round(X * LARGE);
    ll YY = round(Y * LARGE);
    ll RR = round(R * LARGE);
    return (x - XX) * (x - XX) + (y - YY) * (y - YY) <= RR * RR;
}

ll counter(ll x, ll base, ll delta) {
    ll ok = base;
    ll er = base + delta;
    if (!inside(x, ok)) return 0;
    while(abs(ok - er) > 1) {
        ll mid = (ok + er) / 2;
        if (inside(x, mid)) ok = mid;
        else er = mid;
    }
    return abs(er - base);
}

int main() {
    cin >> X >> Y >> R;
    ll ans = 0;
    for (ll x = floor(X - R - 1); x < floor(X + R + 1); x++) {
        ans += counter(x, floor(Y) + 1, floor(R) + 1);
        ans += counter(x, floor(Y), - floor(R) - 1);
    }
    cout << ans << endl;
}
