#include <bits/stdc++.h>
using namespace std;
template <typename T>
void Read(T &cn) {
  char c;
  int sig = 1;
  while (!isdigit(c = getchar()))
    if (c == '-') sig = -1;
  cn = c - 48;
  while (isdigit(c = getchar())) cn = cn * 10 + c - 48;
  cn *= sig;
}
template <typename T>
void Write(T cn) {
  if (cn < 0) {
    putchar('-');
    cn = 0 - cn;
  }
  int wei = 0;
  T cm = 0;
  int cx = cn % 10;
  cn /= 10;
  while (cn) wei++, cm = cm * 10 + cn % 10, cn /= 10;
  while (wei--) putchar(cm % 10 + 48), cm /= 10;
  putchar(cx + 48);
}
template <typename T>
void Max(T &cn, T cm) {
  cn = cn < cm ? cm : cn;
}
template <typename T>
void Min(T &cn, T cm) {
  cn = cn < cm ? cn : cm;
}
struct qwe {
  int x, y;
  void getit() {
    Read(x);
    Read(y);
  }
  inline friend bool operator<(qwe a, qwe b) {
    return a.x == b.x ? a.y < b.y : a.x < b.x;
  }
};
struct qwer {
  int wei, num;
  void mk(int cn, int cm) {
    wei = cn;
    num = cm;
  }
  inline friend bool operator<(qwer a, qwer b) {
    return a.wei == b.wei ? a.num < b.num : a.wei < b.wei;
  }
};
int R, C, n, k;
qwe a[3010 + 1];
int wei1[12], wei2[12];
int wlen1, wlen2;
set<qwer> S;
long long ans, zong;
void zeng(int cn, int cm) {
  qwer lin;
  lin.mk(cn, cm);
  set<qwer>::iterator lin1 = S.upper_bound(lin);
  wlen1 = wlen2 = 0;
  for (set<qwer>::iterator i = lin1; i != S.end() && wlen2 < k; i++)
    wei2[++wlen2] = i->wei;
  if (lin1 != S.begin()) {
    lin1--;
    for (set<qwer>::iterator i = lin1; i != S.begin() && wlen1 < k; i--)
      wei1[++wlen1] = i->wei;
    if (wlen1 < k && S.begin() != S.end()) wei1[++wlen1] = (S.begin())->wei;
  }
  if (wlen1 < k) wei1[++wlen1] = 0;
  if (wlen2 < k) wei2[++wlen2] = C + 1;
  wei1[0] = wei2[0] = cn;
  for (int i = k - wlen1 + 1; i <= wlen2; i++)
    zong =
        1ll * (wei2[i] - wei2[i - 1]) * (wei1[k - i] - wei1[k + 1 - i]) + zong;
  S.insert(lin);
}
int main() {
  Read(R);
  Read(C);
  Read(n);
  Read(k);
  for (int i = 1; i <= n; i++) a[i].getit();
  sort(a + 1, a + n + 1);
  ans = 0;
  long long lsta = 0, lstx = -1;
  for (int i = 1; i <= R; i++) {
    int xian = 0;
    while (xian <= n && a[xian + 1].x < i) xian++;
    if (lstx == xian) {
      ans = ans + lsta;
      continue;
    }
    lsta = 0;
    lstx = xian;
    zong = 0;
    S.clear();
    for (int j = i; j <= R; j++) {
      while (xian < n && a[xian + 1].x <= j) {
        xian++;
        zeng(a[xian].y, xian);
      }
      lsta = lsta + zong;
    }
    ans = ans + lsta;
  }
  Write(ans);
  puts("");
  return 0;
}
