Language: Java

import java.util.Scanner;

class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner();
    int h = Integer.parseInt(sc.next());
    int w = Integer.parseInt(sc.next());
    int a = Integer.parseInt(sc.next());
    int b = Integer.parseInt(sc.next());
    int modnum = 1000000007;
    
    int r = modFactorial(h-a+b, h-a)%modnum*modfactorial(h-a+b, b)%modnum/modFactorial(h-a+b, 1);
    r = r*modFactorial(w+a-b, a)%modnum*modFactorial(w+a-b, w-b)%modnum/modFactorial(w+a-b);
    
    System.out.println(r);
  }
  
  private static int modFactorial(int n, int stop){
    if(n == 1){
      return 1;
    }else if(n == stop+1){
      return n%1000000007;
    }else{
      return modFactorial(n-1)*(n%1000000007);
    }
  }
}

Compiler output:
Main.java:5: error: no suitable constructor found for Scanner(no arguments)
    Scanner sc = new Scanner();
                 ^
    constructor Scanner.Scanner(Readable,Pattern) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(Readable) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(InputStream) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(InputStream,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(InputStream,Charset) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(File) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(File,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(File,Charset) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(File,CharsetDecoder) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(Path) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(Path,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(Path,Charset) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(ReadableByteChannel) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(ReadableByteChannel,String) is not applicable
      (actual and formal argument lists differ in length)
    constructor Scanner.Scanner(ReadableByteChannel,Charset) is not applicable
      (actual and formal argument lists differ in length)
Main.java:12: error: cannot find symbol
    int r = modFactorial(h-a+b, h-a)%modnum*modfactorial(h-a+b, b)%modnum/modFactorial(h-a+b, 1);
                                            ^
  symbol:   method modfactorial(int,int)
  location: class Main
Main.java:13: error: method modFactorial in class Main cannot be applied to given types;
    r = r*modFactorial(w+a-b, a)%modnum*modFactorial(w+a-b, w-b)%modnum/modFactorial(w+a-b);
                                                                        ^
  required: int,int
  found:    int
  reason: actual and formal argument lists differ in length
Main.java:24: error: method modFactorial in class Main cannot be applied to given types;
      return modFactorial(n-1)*(n%1000000007);
             ^
  required: int,int
  found:    int
  reason: actual and formal argument lists differ in length
4 errors