https://www.luogu.com.cn/record/154980060
#include <iostream>
#include <algorithm>
const int MOD = 1e9 + 7;
int x[500005], y[500005];
int sum1(int n)
{
return 1ll * n * (n + 1) / 2 % MOD;
}
int sum2(int n)
{
if (n % 3 == 0)
return 1ll * n / 3 * (n + 1) / 2 % MOD * (2 * n + 1) % MOD;
return 1ll * n * (n + 1) / 2 % MOD * (2 * n + 1) / 3 % MOD;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int n, m, k;
long long f, ans = 0;
std::cin >> n >> m >> k;
for (int i = 1; i <= k; i++)
std::cin >> x[i] >> y[i];
ans += 1ll * m * m % MOD * n % MOD * sum1(n - 1) % MOD;
ans -= 1ll * m * m % MOD * sum2(n - 1) % MOD;
ans += 1ll * n * n % MOD * m % MOD * sum1(m - 1) % MOD;
ans -= 1ll * n * n % MOD * sum2(m - 1) % MOD;
ans = (ans % MOD + MOD) % MOD;
for (int i = 1; i <= k; i++)
{
ans -= 1ll * m * sum1(x[i] - 1) % MOD;
ans -= 1ll * m * sum1(n - x[i]) % MOD;
ans -= 1ll * n * sum1(y[i] - 1) % MOD;
ans -= 1ll * n * sum1(m - y[i]) % MOD;
ans = (ans % MOD + MOD) % MOD;
}
f = 0;
std::sort(x + 1, x + k + 1);
for (int i = 2; i <= k; i++)
{
f += 1ll * (i - 1) * (x[i] - x[i - 1]) % MOD;
f %= MOD;
ans += f;
ans %= MOD;
}
f = 0;
std::sort(y + 1, y + k + 1);
for (int i = 2; i <= k; i++)
{
f += 1ll * (i - 1) * (y[i] - y[i - 1]) % MOD;
f %= MOD;
ans += f;
ans %= MOD;
}
std::cout << ans << "\n";
return 0;
}