We have a grid of squares with N rows and M columns. Let (i, j) denote the square at the i-th row from the top and j-th column from the left. We will choose K of the squares and put a piece on each of them.

If we place the K pieces on squares (x_1, y_1), (x_2, y_2), ..., and (x_K, y_K), the cost of this arrangement is computed as:

\sum_{i=1}^{K-1} \sum_{j=i+1}^K (|x_i - x_j| + |y_i - y_j|)

Find the sum of the costs of all possible arrangements of the pieces. Since this value can be tremendous, print it modulo 10^9+7.

We consider two arrangements of the pieces different if and only if there is a square that contains a piece in one of the arrangements but not in the other.

Constraints

* 2 \leq N \times M \leq 2 \times 10^5
* 2 \leq K \leq N \times M
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N M K


Output

Print the sum of the costs of all possible arrangements of the pieces, modulo 10^9+7.

Examples

Input

2 2 2


Output

8


Input

4 5 4


Output

87210


Input

100 100 5000


Output

817260251
#include <bits/stdc++.h>
#define x first
#define y second
#define pb push_back

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

const int MAXN = 2e5 + 10;
const ll mod = 1e9+7;

ll n, m, k;
ll p, q;

ll mypow(ll x, ll p){
	ll ret = 1;
	while(p){
		if(p&1){
			ret *= x;
			ret %= mod;
		}
		x *= x;
		x %= mod;
		p >>= 1;
	}

	return ret;
}

int main(){
	ios_base::sync_with_stdio(false), cin.tie(0);
	cin >> n >> m >> k;
	p = q = 1;

	ll ck = k - 2;
	ll cn = n*m - 2;
	for(ll i=1; i<=cn; i++){
		p *= i;
		p %= mod;
	}

	for(ll i=1; i<=cn-ck; i++){
		q *= i;
		q %= mod;
	}
	for(ll i=1; i<=ck; i++){
		q *= i;
		q %= mod;
	}
	
	ll ans = 0;
	ll ot = 0;
	for(ll i=1; i<=n; i++){
		ans += ot * m;	
		ans %= mod;
		
		ot += i * m;
		ot %= mod;
	}

	ot = 0;
	for(ll i=1; i<=m; i++){
		ans += ot * n;
		ans %= mod;

		ot += i * n;
		ot %= mod;
	}

	ans *= p;
	ans %= mod;
	ans *= mypow(q, mod-2);
	ans %= mod;
	
	cout << ans << endl;
}
