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

using ll = long long;

const ll mod = 998244353;

ll power(ll a, ll x)
{
    if(x == 0) return 1;
    if(x == 1) return a;
    if(x % 2 == 0)
        return (power(a, x / 2) * power(a, x / 2)) %mod;
    else
        return (a * power(a, x - 1)) % mod;
}

int main()
{
    cin.tie(0); cout.tie(0);
    ios_base::sync_with_stdio(false);

    ll n, m, k, ans = 0;
    cin >> n >> m >> k;
    if(n == 1)
        cout << power(k, m);
    else if(m == 1)
        cout << power(k, n);
    else if(n <= m)
    {
        for(int i = 1; i <= k; i++)
            ans=(ans+((power(i, n)-power(i-1, n))%mod)*power((k-i+1), m))%mod;
        ans=(ans+mod)%mod;
        cout << ans;
    }
    else
    {
        for(int i = 1; i <= k; i++)
            ans=(ans+((power(i, m)-power(i-1, m))%mod)*power((k-i+1), n))%mod;
        ans=(ans+mod)%mod;
        cout << ans;
    }
}

#include <bits/stdc++.h>
#include <climits>
#define rep(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
#define srep(i, begin, end) for (__typeof(end) i = begin; i != end; i++)
#define si(x) int x = scanInt();
#define sll(x) LL x = scanLong();
#define sci(x) int x; scanf("%d", &x);
#define scll(x) LL x; scanf("%lld", &x);
#define pi(x) printf("%d ", x)
#define pll(x) printf("%lld ", x)
#define nl printf("\n")
#define clr(a) memset(a, 0, sizeof(a))
#define PB push_back
#define MP make_pair
using namespace std;
typedef unsigned int UI; // 32 bit integer
typedef long int LI; // 32 bit integer
typedef unsigned long int ULI; // 32 bit unsigned integer
typedef long long int LL; // 64 bit integer
typedef unsigned long long int ULL; // 64 bit unsigned integer
typedef long double LD;
typedef vector<int> VI;
typedef vector<LL> VLL;
typedef deque<int> DI;
typedef deque<LL> DLL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
const LL MOD = 998244353;

/* Fast I/O */
inline int scanInt() {
	int n = 0;
	char ch = getchar();
	int sign = 1;
	while(ch < '0' || ch > '9') {
		if(ch == '-')	sign = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') {
		n = (n<<1)+(n<<3)+(int)(ch-'0');
		ch = getchar();
	}
	return n*sign;
}

inline LL scanLong() {
	LL n = 0;
	char ch = getchar();
	LL sign = 1;
	while(ch < '0' || ch > '9') {
		if(ch == '-')	sign = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') {
		n = (n<<1)+(n<<3)+(LL)(ch-'0');
		ch = getchar();
	}
	return n*sign;
}

LL modpow(LL a, LL n, LL m) {
	LL r = 1;
	while(n != 0) {
		if(n % 2 == 1)	r = (r * a) % m;
		a = (a * a) % m;
		n >>= 1;
	}
	return r;
}

int main() {
	sll(n); sll(m); sll(k);
	if(n == 1 && m == 1) {
		pll(k); nl;
		return 0;
	}
	if(n == 1) {
		pll(modpow(k, m, MOD)); nl;
		return 0;
	}
	if(m == 1) {
		pll(modpow(k, n, MOD)); nl;
		return 0;
	}
	LL ans = 0;
	rep(x, 1, k+1) {
		ans += (((modpow(x, n, MOD) - modpow(x-1, n, MOD) + MOD) % MOD) * modpow(k-x+1, m, MOD)) % MOD;
		ans %= MOD;
	}
	pll(ans); nl;
}
