#include #include #include #include using namespace std; typedef long long ll; typedef pair P; typedef pair T; long long int INF = 2e18; const ll fact_table = 1200008; double Pi = 3.1415926535897932384626; priority_queue pql; priority_queue

pqp; priority_queue

bag; //big priority queue priority_queue ,greater > pqls; priority_queue ,greater

> pqps; //small priority queue //top pop ll dx[8]={1,0,-1,0,1,1,-1,-1}; ll dy[8]={0,1,0,-1,1,-1,-1,1}; char dir[] = "DRUL"; //↓,→,↑,← #define endl "\n" #ifdef ENJAPMA #undef endl #endif #define p(x) cout<=1; i--){ rfact[i-1] = rfact[i] * i; rfact[i-1] %= mod; } return;} ll c3(ll n,ll r){ assert(n >= r); assert(n >= 0); assert(r >= 0); return (((fact[n] * rfact[r]) % mod ) * rfact[n-r]) % mod;} bool multicase = false; ll n,m,num,a,b,c,d,e,q; ll x[100005], y[100005], z[100005]; ll k; void solve(){ ll n, m, k; ll ans = 0; cin >> n >> m >> k; for(ll i=1;i<=m;i++){ // 嘘つきをi個のグループに分ける ll dif = 2 * i; ll same = n + m - dif; if(same < k)continue; if(n < i)continue; ans += (c3(m - 1, i - 1) * c3(n, i)) % mod; ans %= mod; } ans *= (fact[n-1] * fact[m]) % mod; ans %= mod; p(ans); } int main(){ // init(); c3_init(); ios::sync_with_stdio(false); cin.tie(nullptr); ll q, testcase = 1; if(multicase){ cin >> q; }else{ q = 1; } while(q--){ // pu("Case ");pu("#");pu(testcase);pu(": "); solve(); testcase++; } // solve(); return 0; }