problem

I want to put as many rectangular tiles as possible on a rectangular wall with a size of $ h $ in height and $ w $ in width, and a size of $ a $ in height and $ b $ in width.

The following conditions must be met when attaching tiles.


* Do not stack tiles.
* Do not apply tiles diagonally, that is, any edge of the tile is parallel or perpendicular to any edge of the wall.
* Do not change the orientation of the tiles, that is, do not swap the vertical and horizontal directions.



When as many tiles as possible are pasted, find the sum of the areas not covered by the tiles.



output

Output the total area of ​​the part not covered by the tile. Also, output a line break at the end.

Example

Input

5 8
2 2


Output

8
#include<bits/stdc++.h>
#define INF 1e9
#define llINF 1e18
#define MOD 1000000007
#define pb push_back
#define mp make_pair 
#define F first
#define S second
#define ll long long
#define ull unsigned long long
#define vi vector<ll>
#define vvi vector<vi>
#define BITLE(n) (1LL<<(n))
#define BITCNT(n) (__builtin_popcountll(n))
#define SUBS(s,f,t) ((s).substr((f)-1,(t)-(f)+1))
#define ALL(a) (a).begin(),(a).end()
using namespace std;
struct Grid{ll x,y,t;};
struct Edge{ll to,cost;};
struct Graph{vector<vector<Edge>>E;int V;
  const ll Inf = llINF;const int MAX_V=201010;vector<ll>d;
  Graph(int n):E(n){d.resize(MAX_V);E.resize(n);V=n;}
  void init(){for(int i=0;i<MAX_V;i++)d[i]=Inf;}
  void add_edge(ll from,ll to,ll cost){E[from].pb({to,cost});}
};
bool field[1000][1000];
int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll a,b;cin>>a>>b;
  ll h,w;cin>>h>>w;
  for(int i=0;i<a;i++){
    for(int j=0;j<b;j++){
      if(field[i][j]==false&&i+h-1<a&&j+w-1<b)
	for(int k=0;k<h;k++)
	  for(int kk=0;kk<w;kk++)
	    field[i+k][j+kk]=true;
    }
  }
  ll ans=0;
  for(int i=0;i<a;i++){
    for(int j=0;j<b;j++){
      ans+=(!field[i][j]);
      // cout<<(field[i][j]?'o':'.');
    }
    //cout<<endl;
  }
  cout<<ans<<endl;
  return 0;
}

