Language: C++

// freopen("input.txt", "rt", stdin);
// freopen("output.txt", "wt", stdout);
#define _GLIBCXX_DEBUG//only for debugging
#include <bits/stdc++.h>
#include <chrono>
#include <ext/rope>
#define VALHALLA ios_base::sync_with_stdio(false);cin.tie(0);cout<<fixed<<setprecision(13);
#define endl "\n"
#define pb push_back
#define all(v) v.begin(),v.end()
#define debug(x) std::cerr << #x << ": " << (x) << '\n';
#define sz(x) (int)x.size()
#define fast(map_name) map_name.reserve(1024);map_name.max_load_factor(0.25);
using namespace std;
using namespace __gnu_cxx;
typedef long long int ll;
typedef pair<int,int> ii;
typedef complex<double> point;
const double epsilon=1e-9;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int mod=1e9+7;
/* VARIABLE DECLARATION START */
int dp[100001][100001];
int a,b,h,w;


/*  FUCNTION TEMPLATE STARTS  HERE */

double dot(point a,point b){ return (conj(a)*b).real() ; }
double cross(point a,point b){ return (conj(a)*b).imag() ; }
double dist(point a, point b){ return abs(a-b); }
struct neal {
static uint64_t splitmix64(uint64_t x)
 {
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const
 {
    static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
    return splitmix64(x + FIXED_RANDOM);
}
};
struct HASH{
  size_t operator()(const pair<int,int>&x)const{
    return (size_t) x.first * 37U + (size_t) x.second;
  }
};
bool isprime(ll n) {
    if (n == 2 || n == 3) return true;
    if (n < 2 || n % 2 == 0 || n % 3 == 0) return false;
    for (ll i = 6; (i - 1) * (i - 1) <= n; i += 6) {
        if (n % (i - 1) == 0 || n % (i + 1) == 0) {
            return false;
        }
    }
    return true;
}
inline ll exp(ll a, ll b, ll mod) {
    ll n = 1;
    ll p = a;
    while (b > 0) {
        if (b % 2 == 1) {
            n *= p;
            n %= mod;
        }
        p *= p;
        p %= mod;
        b /= 2;
    }
    return n;
}

inline bool comp(double a,double b)
{
  return (fabs(a-b)<epsilon);
}
ll gcd(ll u, ll v) {
  ll r;
  while (0 != v) {
    r = u % v; u = v; v = r;
  }
  return u;
}

/*  FUCNTION TEMPLATE ENDS HERE */
int solve(int r,int c)
{
  if(r>h-a&&r<=h&&c>=1&&c<=b)
    return 0;
  if(r==1||c==1)return 1;
  if(dp[r][c]!=-1)return dp[r][c];
  int ans=0;
  ans=(solve(r-1,c)%mod+solve(r,c-1)%mod)%mod;
  return dp[r][c]=ans;
}
int main()
{
   VALHALLA
   cin>>h>>w;
   cin>>a>>b;
   memset(dp,-1,sizeof(dp));
   cout<<solve(h,w)<<endl;


   
   
   


}

Compiler output:
/tmp/cc3zziIu.o: in function `solve(int, int)':
a.cc:(.text+0x28a): relocation truncated to fit: R_X86_64_PC32 against symbol `h' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x290): relocation truncated to fit: R_X86_64_PC32 against symbol `a' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x29d): relocation truncated to fit: R_X86_64_PC32 against symbol `h' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x2ae): relocation truncated to fit: R_X86_64_PC32 against symbol `b' defined in .bss section in /tmp/cc3zziIu.o
/tmp/cc3zziIu.o: in function `main':
a.cc:(.text+0x47b): relocation truncated to fit: R_X86_64_PC32 against symbol `h' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x497): relocation truncated to fit: R_X86_64_PC32 against symbol `w' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x4a9): relocation truncated to fit: R_X86_64_PC32 against symbol `a' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x4c5): relocation truncated to fit: R_X86_64_PC32 against symbol `b' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x4f7): relocation truncated to fit: R_X86_64_PC32 against symbol `w' defined in .bss section in /tmp/cc3zziIu.o
a.cc:(.text+0x4fd): relocation truncated to fit: R_X86_64_PC32 against symbol `h' defined in .bss section in /tmp/cc3zziIu.o
collect2: error: ld returned 1 exit status