N,M,K =map(int, input().split())
mod = 10**9 + 7

# cmbが10**10くらいだけど求められるか？って感じ
# 問題読み違えていた。。。N*M <= 2*10**5だ。。。まあ普通だ。
# もうライブラリ使おう。昔nCrのrが小さい時の工夫とかあったけど今回は大丈夫だ。

# https://ikatakos.com/pot/programming_algorithm/number_theory/mod_combination
import numpy as np
 
def prepare(n, MOD):
    nrt = int(n ** 0.5) + 1
    nsq = nrt * nrt
    facts = np.arange(nsq, dtype=np.int64).reshape(nrt, nrt)
    facts[0, 0] = 1
    for i in range(1, nrt):
        facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD
    for i in range(1, nrt):
        facts[i] = facts[i] * facts[i - 1, -1] % MOD
    facts = facts.ravel().tolist()
 
    invs = np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt)
    invs[-1, -1] = pow(facts[-1], MOD - 2, MOD)
    for i in range(nrt - 2, -1, -1):
        invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD
    for i in range(nrt - 2, -1, -1):
        invs[i] = invs[i] * invs[i + 1, 0] % MOD
    invs = invs.ravel().tolist()
 
    return facts, invs

facts, invs = prepare(N*M+10,mod)
def cmb(n,r,MOD):
  return (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod

## シグマを分離すること。２点i,jの選び方数、かけることのi,jの距離とする。あとはこれに２点以外の選び方のパターン数をかければ良い
# X,Yを独立して考える
# 例えばXについて考えると、使う列の選び方がN*2, 使う行の選び方はM-dis(1ならM-1だし、M-1離れてるのは１個しか選べない）
# disは距離が答えに寄与するから
# cmb()はその２点以外の選び方の個数の話。
#  もちろん他のi,jについて見たら同じ盤面何度も見てるけど、今のi,jに関する値しか計算してないからOK
ans = 0

for dis in range(M):
  ans += N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod)
  ans %= mod
for dis in range(N):
  ans += M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod)
  ans %= mod

print(ans) N,M,K =map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M K mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 import numpy as np numpy def prepare(n, MOD):
    nrt = int(n ** 0.5) + 1
    nsq = nrt * nrt
    facts = np.arange(nsq, dtype=np.int64).reshape(nrt, nrt)
    facts[0, 0] = 1
    for i in range(1, nrt):
        facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD
    for i in range(1, nrt):
        facts[i] = facts[i] * facts[i - 1, -1] % MOD
    facts = facts.ravel().tolist()
 
    invs = np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt)
    invs[-1, -1] = pow(facts[-1], MOD - 2, MOD)
    for i in range(nrt - 2, -1, -1):
        invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD
    for i in range(nrt - 2, -1, -1):
        invs[i] = invs[i] * invs[i + 1, 0] % MOD
    invs = invs.ravel().tolist()
 
    return facts, invs prepare nrt = int(n ** 0.5) + 1 nrt int(n ** 0.5) + 1 int(n ** 0.5) int n ** 0.5 n 0.5 1 nsq = nrt * nrt nsq nrt * nrt nrt nrt facts = np.arange(nsq, dtype=np.int64).reshape(nrt, nrt) facts np.arange(nsq, dtype=np.int64).reshape(nrt, nrt) np.arange(nsq, dtype=np.int64).reshape np.arange(nsq, dtype=np.int64) np.arange np arange nsq dtype=np.int64 dtype np.int64 np int64 reshape nrt nrt facts[0, 0] = 1 facts[0, 0] facts 0 1 for i in range(1, nrt):
        facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD
     i range(1, nrt) range 1 nrt facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD facts[:, i] facts : facts[:, i] * facts[:, i - 1] % MOD facts[:, i] * facts[:, i - 1] facts[:, i] facts : facts[:, i - 1] facts : MOD for i in range(1, nrt):
        facts[i] = facts[i] * facts[i - 1, -1] % MOD
     i range(1, nrt) range 1 nrt facts[i] = facts[i] * facts[i - 1, -1] % MOD facts[i] facts i facts[i] * facts[i - 1, -1] % MOD facts[i] * facts[i - 1, -1] facts[i] facts i facts[i - 1, -1] facts i - 1 i 1 MOD facts = facts.ravel().tolist() facts facts.ravel().tolist() facts.ravel().tolist facts.ravel() facts.ravel facts ravel tolist invs = np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt) invs np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt) np.arange(1, nsq + 1, dtype=np.int64).reshape np.arange(1, nsq + 1, dtype=np.int64) np.arange np arange 1 nsq + 1 nsq 1 dtype=np.int64 dtype np.int64 np int64 reshape nrt nrt invs[-1, -1] = pow(facts[-1], MOD - 2, MOD) invs[-1, -1] invs -1 pow(facts[-1], MOD - 2, MOD) pow facts[-1] facts -1 MOD - 2 MOD 2 MOD for i in range(nrt - 2, -1, -1):
        invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD
     i range(nrt - 2, -1, -1) range nrt - 2 nrt 2 -1 -1 invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD invs[:, i] invs : invs[:, i] * invs[:, i + 1] % MOD invs[:, i] * invs[:, i + 1] invs[:, i] invs : invs[:, i + 1] invs : MOD for i in range(nrt - 2, -1, -1):
        invs[i] = invs[i] * invs[i + 1, 0] % MOD
     i range(nrt - 2, -1, -1) range nrt - 2 nrt 2 -1 -1 invs[i] = invs[i] * invs[i + 1, 0] % MOD invs[i] invs i invs[i] * invs[i + 1, 0] % MOD invs[i] * invs[i + 1, 0] invs[i] invs i invs[i + 1, 0] invs i + 1 i 1 MOD invs = invs.ravel().tolist() invs invs.ravel().tolist() invs.ravel().tolist invs.ravel() invs.ravel invs ravel tolist return facts, invs return facts, invs facts invs n n MOD MOD facts, invs = prepare(N*M+10,mod) facts prepare(N*M+10,mod) prepare N*M+10 N*M N M 10 mod invs def cmb(n,r,MOD):
  return (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod

## シグマを分離すること。２点i,jの選び方数、かけることのi,jの距離とする。あとはこれに２点以外の選び方のパターン数をかければ良い
# X,Yを独立して考える
# 例えばXについて考えると、使う列の選び方がN*2, 使う行の選び方はM-dis(1ならM-1だし、M-1離れてるのは１個しか選べない）
# disは距離が答えに寄与するから
# cmb()はその２点以外の選び方の個数の話。
#  もちろん他のi,jについて見たら同じ盤面何度も見てるけど、今のi,jに関する値しか計算してないからOK cmb return (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod ((facts[n] * invs[n-r]) % mod) * invs[r] (facts[n] * invs[n-r]) % mod facts[n] * invs[n-r] facts[n] facts n invs[n-r] invs n-r n r mod invs[r] invs r mod n n r r MOD MOD ans = 0 ans 0 for dis in range(M):
  ans += N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod)
  ans %= mod dis range(M) range M ans += N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod) ans N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod) N**2 * (M-dis) * dis N**2 * (M-dis) N**2 N 2 M-dis M dis dis cmb(N*M-2, K-2, mod) cmb N*M-2 N*M N M 2 K-2 K 2 mod ans %= mod ans mod for dis in range(N):
  ans += M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod)
  ans %= mod dis range(N) range N ans += M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod) ans M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod) M**2 * (N-dis) * dis M**2 * (N-dis) M**2 M 2 N-dis N dis dis cmb(N*M-2, K-2, mod) cmb N*M-2 N*M N M 2 K-2 K 2 mod ans %= mod ans mod print(ans) print ans ans = 0 0 ans mod = 10**9 + 7 10**9 + 7 mod ans %= mod mod ans invs = prepare(N*M+10,mod) prepare(N*M+10,mod) invs ans += N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod) N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod) ans N,M,K =map(int, input().split()) map(int, input().split()) N facts, invs = prepare(N*M+10,mod) prepare(N*M+10,mod) facts def cmb(n,r,MOD):
  return (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod

## シグマを分離すること。２点i,jの選び方数、かけることのi,jの距離とする。あとはこれに２点以外の選び方のパターン数をかければ良い
# X,Yを独立して考える
# 例えばXについて考えると、使う列の選び方がN*2, 使う行の選び方はM-dis(1ならM-1だし、M-1離れてるのは１個しか選べない）
# disは距離が答えに寄与するから
# cmb()はその２点以外の選び方の個数の話。
#  もちろん他のi,jについて見たら同じ盤面何度も見てるけど、今のi,jに関する値しか計算してないからOK def cmb(n,r,MOD):
  return (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod

## シグマを分離すること。２点i,jの選び方数、かけることのi,jの距離とする。あとはこれに２点以外の選び方のパターン数をかければ良い
# X,Yを独立して考える
# 例えばXについて考えると、使う列の選び方がN*2, 使う行の選び方はM-dis(1ならM-1だし、M-1離れてるのは１個しか選べない）
# disは距離が答えに寄与するから
# cmb()はその２点以外の選び方の個数の話。
#  もちろん他のi,jについて見たら同じ盤面何度も見てるけど、今のi,jに関する値しか計算してないからOK cmb M,K =map(int, input().split()) map(int, input().split()) M ans %= mod mod ans ans += M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod) M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod) ans def prepare(n, MOD):
    nrt = int(n ** 0.5) + 1
    nsq = nrt * nrt
    facts = np.arange(nsq, dtype=np.int64).reshape(nrt, nrt)
    facts[0, 0] = 1
    for i in range(1, nrt):
        facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD
    for i in range(1, nrt):
        facts[i] = facts[i] * facts[i - 1, -1] % MOD
    facts = facts.ravel().tolist()
 
    invs = np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt)
    invs[-1, -1] = pow(facts[-1], MOD - 2, MOD)
    for i in range(nrt - 2, -1, -1):
        invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD
    for i in range(nrt - 2, -1, -1):
        invs[i] = invs[i] * invs[i + 1, 0] % MOD
    invs = invs.ravel().tolist()
 
    return facts, invs def prepare(n, MOD):
    nrt = int(n ** 0.5) + 1
    nsq = nrt * nrt
    facts = np.arange(nsq, dtype=np.int64).reshape(nrt, nrt)
    facts[0, 0] = 1
    for i in range(1, nrt):
        facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD
    for i in range(1, nrt):
        facts[i] = facts[i] * facts[i - 1, -1] % MOD
    facts = facts.ravel().tolist()
 
    invs = np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt)
    invs[-1, -1] = pow(facts[-1], MOD - 2, MOD)
    for i in range(nrt - 2, -1, -1):
        invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD
    for i in range(nrt - 2, -1, -1):
        invs[i] = invs[i] * invs[i + 1, 0] % MOD
    invs = invs.ravel().tolist()
 
    return facts, invs prepare K =map(int, input().split()) map(int, input().split()) K
N,M,K =map(int, input().split())
mod = 10**9 + 7

# cmbが10**10くらいだけど求められるか？って感じ
# 問題読み違えていた。。。N*M <= 2*10**5だ。。。まあ普通だ。
# もうライブラリ使おう。昔nCrのrが小さい時の工夫とかあったけど今回は大丈夫だ。

# https://ikatakos.com/pot/programming_algorithm/number_theory/mod_combination
import numpy as np
 
def prepare(n, MOD):
    nrt = int(n ** 0.5) + 1
    nsq = nrt * nrt
    facts = np.arange(nsq, dtype=np.int64).reshape(nrt, nrt)
    facts[0, 0] = 1
    for i in range(1, nrt):
        facts[:, i] = facts[:, i] * facts[:, i - 1] % MOD
    for i in range(1, nrt):
        facts[i] = facts[i] * facts[i - 1, -1] % MOD
    facts = facts.ravel().tolist()
 
    invs = np.arange(1, nsq + 1, dtype=np.int64).reshape(nrt, nrt)
    invs[-1, -1] = pow(facts[-1], MOD - 2, MOD)
    for i in range(nrt - 2, -1, -1):
        invs[:, i] = invs[:, i] * invs[:, i + 1] % MOD
    for i in range(nrt - 2, -1, -1):
        invs[i] = invs[i] * invs[i + 1, 0] % MOD
    invs = invs.ravel().tolist()
 
    return facts, invs

facts, invs = prepare(N*M+10,mod)
def cmb(n,r,MOD):
  return (((facts[n] * invs[n-r]) % mod) * invs[r]) % mod

## シグマを分離すること。２点i,jの選び方数、かけることのi,jの距離とする。あとはこれに２点以外の選び方のパターン数をかければ良い
# X,Yを独立して考える
# 例えばXについて考えると、使う列の選び方がN*2, 使う行の選び方はM-dis(1ならM-1だし、M-1離れてるのは１個しか選べない）
# disは距離が答えに寄与するから
# cmb()はその２点以外の選び方の個数の話。
#  もちろん他のi,jについて見たら同じ盤面何度も見てるけど、今のi,jに関する値しか計算してないからOK
ans = 0

for dis in range(M):
  ans += N**2 * (M-dis) * dis * cmb(N*M-2, K-2, mod)
  ans %= mod
for dis in range(N):
  ans += M**2 * (N-dis) * dis * cmb(N*M-2, K-2, mod)
  ans %= mod

print(ans)