#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, s, n) for (int i = s; i < (int)(n); i++)
#define chmax(a, b) a = max(a, b)
#define chmin(a, b) a = min(a, b)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define even(x) (x % 2 == 0 ? true : false)
#define odd(x) (x % 2 ? true : false)

using namespace std;
using ll = long long;
using ull = unsigned long long;
using uint = unsigned;
using pii = pair<int, int>;

//const ll INF = 1e18L + 5;
//const int INF = 1e9 + 5;
//const double pi = 3.14159265358979323846;
//const int mod = 1000000007;
//vector<vector<int>> dp(m, vector<int>(n));

void	solve()
{
	vector<int>a(3);

	for (int i = 0; i < 3; i++) {
		cin >> a[i];
	}
	sort(all(a));
	if (a[2] - a[1] == a[1] - a[0])
		cout << "Yes" << endl;
	else
		cout << "No" << endl;
}

int		main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	solve();
}


#include<bits/stdc++.h>
#define ll long long
ll n,m,k; 
const ll mod = 998244353;
ll qmul(ll a,ll b){
	ll tmp = 0,s=0;
	while(b){
		s=(s+a)%mod;
		if(b&1) tmp=(tmp+s)%mod;
		b>>=1;
	}
	return tmp;
}
ll qpow(ll a,ll b){
	if(b==0) return 1;
	ll tmp = qpow(a,b/2);
	tmp = (tmp*tmp)%mod;
	if(b&1) tmp=(tmp*a)%mod;
	return tmp;
}
int main(){
	scanf("%lld%lld%lld",&n,&m,&k);
	if(n==1){
		printf("%lld",qpow(k,m));
		return 0;
	}
	if(m==1){
		printf("%lld",qpow(k,n));
		return 0;
	}
	ll ans = 0;
	ll last = 0;
	for(int i=1;i<=k;++i){
		ll a = qpow(i,n);
		ll b= qpow(k-i+1,m);
		ans=(ans+((a-last+mod)%mod)*b%mod)%mod;
		last = a;
	}
	printf("%lld",ans);
	return 0;
}