#include <stdio.h>

#include <vector>

#define cm (1 << 17)
char cn[cm], *ci = cn + cm, ct;

inline char getcha() {
  if (ci - cn == cm) {
    fread(cn, 1, cm, stdin);
    ci = cn;
  }
  return *ci++;
}

inline int getint() {
  int A = 0;
  while ((ct = getcha()) >= '0') A = A * 10 + ct - '0';
  return A;
}

int main() {
  int h = getint(), w = getint(), n = getint(), m = getint();
  bool g1[h][w] = {}, g2[h][w] = {}, res[h][w] = {};
  for (int i = 0; i < n; ++i) {
    g1[getint() - 1][getint() - 1] = 1;
  }
  for (int i = 0; i < m; ++i) {
    g2[getint() - 1][getint() - 1] = 1;
  }
  for (int i = 0; i < h; ++i) {
    bool flag = 0;
    for (int j = 0; j < w; ++j) {
      if (g2[i][j]) {
        flag = 0;
      } else if (g1[i][j]) {
        flag = 1;
        for (int jj = j - 1; ~jj; --jj) {
          if (g1[i][jj] || g2[i][jj]) break;
          res[i][jj] = 1;
        }
      }
      if (flag) res[i][j] = 1;
    }
  }
  for (int j = 0; j < w; ++j) {
    bool flag = 0;
    for (int i = 0; i < h; ++i) {
      if (g2[i][j]) {
        flag = 0;
      } else if (g1[i][j]) {
        flag = 1;
        for (int ii = i - 1; ~ii; --ii) {
          if (g1[ii][j] || g2[ii][j]) break;
          res[ii][j] = 1;
        }
      }
      if (flag) res[i][j] = 1;
    }
  }
  int ans = 0;
  for (auto&& v : res) {
    for (auto&& e : v) {
      if (e) ans++;
    }
  }
  printf("%d", ans);
  return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0 ; i < (n) ; i++)
#define rep1(i,n) for(int i = 1 ; i <= (n) ; i++)
#define rrep(i,n) for(int i = (n) - 1 ; i >= 0 ; i--)
#define rrep1(i,n) for(int i = (n) ; i > 0 ; i--)
#define MOD 1000000007
using ll = int64_t;
using P = pair<int, int>;
using PL = pair<ll,ll>;
using PD = pair<double,double>;
using ld = long double;
using vi = vector<int>;
using vvi = vector<vector<int>>;
using vl = vector<ll>;
using vvl = vector<vector<ll>>;
using vP = vector<P>;
using p_q = priority_queue<int, vi, greater<int>>;
const int INF = 1001001001;
const ll LINF = (1ll<<62) + ((1ll<<62)-1);
#define v(n) vector<n>
#define vv(n) vector<vector<n>>
#define vvv(n) vector<vector<vector<n>>>
#define p_q(n) priority_queue<(n), v(n), greater<n>>
#define line cout << "================================" << endl;
#define Yn(x) ((x) ? "Yes" : "No")
#define yn(x) ((x) ? "yes" : "no")
#define mmax(a,b) a = max(a,b)
#define mmin(a,b) a = min(a,b)
#define debug(x) cout << #x" : " << (x) << endl;
#define output(x) cout << (x) << endl;
#define outs(x) cout << #x << endl;
#define mod(n) %(n)
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
template <typename T> void chmin(T& a, T b){if(a>b)a=b;}
template <typename T> void chmax(T& a, T b){if(a<b)a=b;}

class alucrex{
    public:
    void vin(vi& a){rep(i,a.size())cin>>a[i];}
    void vin1(vi& a){rep1(i,a.size())cin>>a[i];}
    void vvin(vvi& a){rep(i,a.size())rep(j,a[i].size())cin>>a[i][j];}
    void vvdes(vvi& a){rep(i,a.size()){rep(j,a[i].size()){
        cout << a[i][j] << " ";}cout<<endl;
    }}
    void vinl(vl& a){rep(i,a.size())cin>>a[i];}
    void vvinl(vvl& a){rep(i,a.size())rep(j,a[i].size())cin>>a[i][j];}
    void vvdesl(vvl& a){rep(i,a.size()){rep(j,a[i].size()){
        cout << a[i][j] << " ";}cout<<endl;
    }}
    void vpin(vP& a){for(auto& x:a)cin>>x.first>>x.second;}
    template<typename T>
    void vvd(vv(T)& a){rep(i,a.size()){rep(j,a[i].size()){
        cout << a[i][j] << " ";}cout<<endl;
    }}
};

int main(){
    alucrex al;
    int a, b; cin >> a >> b;
    double ans = a * b;
	ans /= 100;
    cout << ans << endl;
}