Language: C++

#include <bits/stdc++.h>
using namespace std;

long long int par(int p){
    long long int output = 1;
    while(p > 0){
        output *= p;
        p--;
    }
    return output;
}

const int mod = 1e9+7;

int main(){
    int H, W, A, B;
    cin >> H >> W >> A >> B;
    long long long long long int all_c = (par(H + W - 2) / (par(H - 1) * par(W - 1))) % mod;
    long long long long long int elim_c = 0;
    int originalB = B;
    while(B > 0){
        int delB = originalB - B;
        long long long long long int toroot = par(H - A - 1 + delB) / (par(H - A - 1) * par(delB));
        long long long long long int fromroot = par(W - delB + A - 2) / (par(W - delB - 1) * par(A - 1));
        elim_c +=  (toroot * fromroot) % mod;
        B--;
    }
    elim_c = elim_c % mod;
    if(all_c - elim_c > 0){
        cout << (all_c - elim_c) % mod << endl;
    }else{
        cout << (all_c + mod - elim_c) % mod << endl;
    }
}

Compiler output:
a.cc: In function 'int main()':
a.cc:18:15: error: 'long long long' is too long for GCC
   18 |     long long long long long int all_c = (par(H + W - 2) / (par(H - 1) * par(W - 1))) % mod;
      |               ^~~~
a.cc:18:20: error: 'long long long' is too long for GCC
   18 |     long long long long long int all_c = (par(H + W - 2) / (par(H - 1) * par(W - 1))) % mod;
      |                    ^~~~
a.cc:18:25: error: 'long long long' is too long for GCC
   18 |     long long long long long int all_c = (par(H + W - 2) / (par(H - 1) * par(W - 1))) % mod;
      |                         ^~~~
a.cc:19:15: error: 'long long long' is too long for GCC
   19 |     long long long long long int elim_c = 0;
      |               ^~~~
a.cc:19:20: error: 'long long long' is too long for GCC
   19 |     long long long long long int elim_c = 0;
      |                    ^~~~
a.cc:19:25: error: 'long long long' is too long for GCC
   19 |     long long long long long int elim_c = 0;
      |                         ^~~~
a.cc:23:19: error: 'long long long' is too long for GCC
   23 |         long long long long long int toroot = par(H - A - 1 + delB) / (par(H - A - 1) * par(delB));
      |                   ^~~~
a.cc:23:24: error: 'long long long' is too long for GCC
   23 |         long long long long long int toroot = par(H - A - 1 + delB) / (par(H - A - 1) * par(delB));
      |                        ^~~~
a.cc:23:29: error: 'long long long' is too long for GCC
   23 |         long long long long long int toroot = par(H - A - 1 + delB) / (par(H - A - 1) * par(delB));
      |                             ^~~~
a.cc:24:19: error: 'long long long' is too long for GCC
   24 |         long long long long long int fromroot = par(W - delB + A - 2) / (par(W - delB - 1) * par(A - 1));
      |                   ^~~~
a.cc:24:24: error: 'long long long' is too long for GCC
   24 |         long long long long long int fromroot = par(W - delB + A - 2) / (par(W - delB - 1) * par(A - 1));
      |                        ^~~~
a.cc:24:29: error: 'long long long' is too long for GCC
   24 |         long long long long long int fromroot = par(W - delB + A - 2) / (par(W - delB - 1) * par(A - 1));
      |                             ^~~~