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 Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		int K = sc.nextInt();
		long mod=1_000_000_007L;
		long ans=0L;
		for (int i=0;i<M;i++) {
			ans+=(i*(M-i)%mod*(N*N)%mod)%mod;
			ans=ans%mod;
		}
		for (int i=0;i<N;i++) {
			ans+=(i*(N-i)%mod*(M*M)%mod)%mod;
			ans=ans%mod;
		}
		long cnt=calcNumOfCombination(N*M-2,K-2);
		System.out.println((ans*cnt)%mod);
	}

    static long calcNumOfCombination(int n, int r){
    	long mod=1_000_000_007L;
    	return ((factorial(n)*modinv(factorial(n-r),mod))%mod*modinv(factorial(r),mod))%mod;
    }

    static long factorial(int n) {
    	long num=1L;
    	long mod=1_000_000_007L;
    	for (int i=n;i>0;i--) {
    		num=num*i;
    		num%=mod;
    	}
    	return num;
    }

    static long pow(long a,long n) {
    	long mod=1_000_000_007L;
    	long res=1;
    	while (n>0) {
    		if ((n-n/2*2)==1) {
    			res=res*a%mod;
    		}
    		a=a*a%mod;
    		n>>=1;
    	}
    	return res%mod;
    }

    static long modinv(long a,long mod) {
        return pow(a,mod-2);
    }
}