Problem:
Score : 500 points

Problem Statement

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.

Sample Input 1

2 2 2

Sample Output 1

8

There are six possible arrangements of the pieces, as follows:

((1,1),(1,2)), with the cost |1-1|+|1-2| = 1

((1,1),(2,1)), with the cost |1-2|+|1-1| = 1

((1,1),(2,2)), with the cost |1-2|+|1-2| = 2

((1,2),(2,1)), with the cost |1-2|+|2-1| = 2

((1,2),(2,2)), with the cost |1-2|+|2-2| = 1

((2,1),(2,2)), with the cost |2-2|+|1-2| = 1

The sum of these costs is 8.

Sample Input 2

4 5 4

Sample Output 2

87210

Sample Input 3

100 100 5000

Sample Output 3

817260251

Be sure to print the sum modulo 10^9+7.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
template<class T> using V = vector<T>;
template<class T, class U> using P = pair<T, U>;
using vll = V<ll>;
using vvll = V<vll>;
#define rep(i, k, n) for (ll i=k; i<(ll)n; ++i)
#define REP(i, n) rep(i, 0, n)

const ll MOD = (ll)1e9 + 7;
const ll HIGHINF = (ll)1e18;

ll modinv(ll a, ll n) {
  // 法nにおけるaの逆元 (ax≡1 mod nのx)を求める関数
  // modinv(a, MOD)でaの逆元(=a^(-1))が求まる
  ll q, s, t, u, v, w;
  s = a; t = n; u = 1; v = 0;
  while (s > 0) {
    q = t/s;
    w = t - q*s;
    t = s;
    s = w;
    w = v - q*u;
    v = u;
    u = w;
  }
  return (v + n) % n;
}

int main() {
  ll n, m, k; cin >> n >> m >> k;
  ll ans = 0;
  rep(i, 1, n) {
    ans += (i*(n-i)*m*m) % MOD;
    ans %= MOD;
  }
  rep(i, 1, m) {
    ans += (i*(m-i)*n*n) % MOD;
    ans %= MOD;
  }
  ll nm = n*m-2, kk = k-2;
  if (nm-kk < kk) kk = nm-kk;
  ll mi = 1;
  for (ll j=0; j<kk; j++) {
    mi *= nm--;
    mi %= MOD;
  }
  for (ll j=1; j<=kk; j++) {
    mi *= modinv(j, MOD);
    mi %= MOD;
  }
  cout << (ans * mi) % MOD << endl;
  return 0;
}