// Username: WillTheBill
// Time of creation: 2020-11-08 15:24
// Original filename: m.cp.cpp

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

// shortcuts
#define pb push_back
#define fi first
#define se second
#define all(_v) _v.begin(),_v.end()
#define ll long long

// IO
#define multitest signed __T; cin >> __T; while(__T--)
template<typename T>
void _read(T& t);
template<typename T>
void _read(vector<T>&v);
template<typename T1, typename T2>
void _read(pair<T1,T2>&p);
template<typename T>
void _read(T& t){cin >> t;}
template<typename T>
void _read(vector<T>&v){for(unsigned _i=0;_i<v.size();_i++)_read(v[_i]);}
template<typename T1, typename T2>
void _read(pair<T1,T2>&p){_read(p.first);_read(p.second);}
void _masterread(){}
template<typename T,typename... V>
void _masterread(T& t, V&... v){_read(t);_masterread(v...);}
#define re(...)_masterread(__VA_ARGS__)

template<typename T>
void _print(T t);
template<typename T>
void _print(vector<T>&v);
template<typename T1, typename T2>
void _print(pair<T1,T2>&p);
template<typename T>
void _print(T t){cout<<t;}
template<typename T>
void _print(vector<T>&v){for(unsigned _i=0;_i<v.size();_i++)_print(v[_i]),cout<<(_i==v.size()-1?"":" ");}
template<typename T1, typename T2>
void _print(pair<T1,T2>&p){_print(p.first);cout<<" ";_print(p.second);}
void _masterprint(){cout<<endl;}
template<typename T,typename... V>
void _masterprint(T t, V... v){_print(t);if(sizeof...(v))cout<<" ";_masterprint(v...);}
#define pr(...)_masterprint(__VA_ARGS__)

// DEBUG
// colored output???
template <typename T> // start forward declaration
void _debug(T t);
template<typename T1,typename T2>
void _debug(pair<T1,T2> p);
template<typename T>
void _debug(vector<T>v);
template <typename T> // end forward declaration
void _debug(T t){cerr<<t;}
template<typename T1,typename T2>
void _debug(pair<T1,T2> p){cerr<<"{";_debug(p.first);cerr<<", ";_debug(p.second);cerr<<"}";}
template<typename T>
void _debug(vector<T>v){cerr<<"(";for(unsigned _i=0;_i<v.size();_i++)_debug(v[_i]),cerr<<(_i==v.size()-1?"":", ");cerr << ")";}
void _masterdebug(){cerr<<"]\n";}
template<typename T,typename... V>
void _masterdebug(T t,V... v){_debug(t);if(sizeof...(v))cerr<<", ";_masterdebug(v...);}
#ifdef __local__
#define debug(...) cerr<<"["<<#__VA_ARGS__<<"] = [";_masterdebug(__VA_ARGS__)
#else
#define debug(...) 
#endif

// TYPES
// #define int long long

signed main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int h,w,n,m; re(h,w,n,m);
	vector<vector<int>> grid (h,vector<int> (w));
	vector<vector<bool>> good (h, vector<bool> (w));
	for(int i = 0; i < n; i++){
		int a,b; re(a,b); a--,b--;
		grid[a][b] = 1;
		good[a][b] = 1;
	}
	for(int i = 0; i < m; i++){
		int c,d; re(c,d);c--,d--;
		grid[c][d] = 2;
	}
	for(int i = 0; i < h; i++){
		int last = grid[i][0];
		for(int j = 1; j < w; j++){
			if(last == 1) good[i][j] = 1;
			if(grid[i][j] != 0) last = grid[i][j];
		}
		last = grid[i][w-1];
		for(int j = w - 2; j >= 0; j--){
			if(last == 1) good[i][j] = 1;
			if(grid[i][j] != 0) last = grid[i][j];
		}
	}
	for(int j = 0; j < w; j++){
		int last = grid[0][j];
		for(int i = 1; i < h; i++){
			if(last == 1) good[i][j] = 1;
			if(grid[i][j] != 0) last = grid[i][j];
		}
		last = grid[h-1][j];
		for(int i = h - 2; i >= 0; i--){
			if(last == 1) good[i][j] = 1;
			if(grid[i][j] != 0) last = grid[i][j];
		}
	}
	int cnt = 0;
	for(int i = 0; i < h; i++){
		for(int j = 0; j < w; j++){
			cnt += good[i][j] && grid[i][j] != 2;
		}
	}
	pr(cnt);
}

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

int main(){
  int H,W,N,M;
  cin >> H >> W >> N >> M;
  vector<vector<int>> G(H,vector<int>(W,0));
  for(int i=0;i<N;i++){
    int a,b;
    cin >> a >> b;
    a--;b--;
    G[a][b] = 1;
  }
  for(int i=0;i<M;i++){
    int c,d;
    cin >> c >> d;
    c--;d--;
    G[c][d] = -1;
  }
  
  vector<vector<int>> X(H,vector<int>(0)),Y(W,vector<int>(0));
  vector<vector<bool>> Xl(H,vector<bool>(0)),Yl(W,vector<bool>(0));
  for(int i=0;i<H;i++){
    bool light=0;
    for(int j=0;j<W;j++){
      if(G[i][j]==1) light = 1;
      if(G[i][j]==-1){
        X[i].push_back(j);
        Xl[i].push_back(light);
        light = 0;
      }
    }
    X[i].push_back(W);
    Xl[i].push_back(light);
  }
  for(int i=0;i<W;i++){
    bool light=0;
    for(int j=0;j<H;j++){
      if(G[j][i]==1) light = 1;
      if(G[j][i]==-1){
        Y[i].push_back(j);
        Yl[i].push_back(light);
        light = 0;
      }
    }
    Y[i].push_back(H);
    Yl[i].push_back(light);
  }
  
  long long ans=0;
  for(int i=0;i<H;i++){
    for(int j=0;j<W;j++){
      if(G[i][j]==-1) continue;
      int a = lower_bound(X[i].begin(),X[i].end(),j) - X[i].begin(), 
          b = lower_bound(Y[j].begin(),Y[j].end(),i) - Y[j].begin();
      if(Xl[i][a] || Yl[j][b]) ans++;
    }
  }
  
  cout << ans << endl;
  return 0;
}
