#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
#define mems(p) memset(p,-1,sizeof(p))
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define nl "\n"

const int mxN = 8e5 + 100;
const ll MOD = 1e9 + 7;

void fast()
{ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);}

ll gcd(ll a, ll b) {
    return b ? gcd(b, a%b) : a;
}

vector<ll> factorial;

ll expo(ll x, ll exp) {
    if (exp <= 0) return 1;
    ll tmp = (x*x)% MOD;
    if (exp%2) {
        return (expo(tmp, exp/2) * x) % MOD;
    }
    return (expo(tmp, exp/2)) % MOD;
}

ll choice(ll n, ll r) {
    if (n < r) return 0;
    ll numer = factorial[n];
    ll denom = (factorial[r] * factorial[n-r]) % MOD;
    return numer * expo(denom, MOD - 2) % MOD;
}



int main() {
    fast();
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    cout<<a*d-b*c<<nl;
}










#include <iostream>
using namespace std;
long long dp[16*16] = {0};

int H, W;
bool used[16][16] = {false};

int dfs(int h, int w, int a, int b)
{
  if ((a < 0) || (b < 0)) return 0;
  if (w == W) w = 0, h++;
  if (h == H) return 1;
  if (used[h][w]) return dfs(h, w+1, a, b);
  int res = 0;
  used[h][w] = true;
  res += dfs(h, w+1, a, b-1);
  if (w+1 < W && !used[h][w+1]) {
    used[h][w+1] = true;
    res += dfs(h, w+1, a-1, b);
    used[h][w+1] = false;
  }
  if ((h+1 < H && !used[h+1][w])) {
    used[h+1][w] = true;
    res += dfs(h, w+1, a-1, b);
    used[h+1][w] = false;
  }
  used[h][w] = false;
  return res;
}
int main(void) {
  int A, B;
  cin >> H >> W >> A >> B;
  int ans = dfs(0, 0, A, B);
  cout << ans << endl;
  return 0;
}
