#include <bits/stdc++.h>   using namespace std;   const int maxn = 3079;   int r, c, n, k;   vector<int> nx(maxn, -1), pv(maxn, -1), kth(maxn, -1);   vector<vector<int> > my(maxn);   class point {    public:     int x, y;   };   bool cmp(point& a, point& b) { return (a.y == b.y ? a.x < b.x : a.y < b.y); }   vector<point> v(maxn);   long long sum(int i) { return (v[i].y - v[pv[i]].y) * (c + 1 - v[kth[i]].y); }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cin >> r >> c >> n >> k;     long long ans = 0;     int m = n + k + 1;     for (int i = 1; i <= n; i++) cin >> v[i].x >> v[i].y;     v[0] = {r + 1, 0};     for (int i = n + 1; i < m; i++) v[i] = {r + 1, c + 1};     sort(v.begin(), v.begin() + m, cmp);     for (int i = n + 1; i < m; i++)       kth[i] = m - 1, pv[i] = i - 1, nx[i] = min(m - 1, i + 1);     for (int i = m - 1; i >= 0; i--) my[v[i].x].push_back(i);     for (int x1 = 1; x1 <= r; x1++) {       int p = 0;       for (int i = 1; i <= n; i++) {         if (v[i].x < x1) continue;         nx[p] = i, pv[i] = p;         p = i;       }       nx[p] = n + 1, pv[n + 1] = p;       kth[p] = (k == 1 ? p : pv[m - 1]);       for (int i = p; i >= 0; i = pv[i]) kth[i] = pv[kth[nx[i]]];       long long cur = 0;       for (int i = nx[0]; i <= n; i = nx[i]) cur += sum(i);       for (int x2 = r; x2 >= x1; x2--) {         ans += cur;         for (int i : my[x2]) {           cur -= sum(i);           for (int j = pv[i], cnt = 0; cnt < k - 1 && j; cnt++, j = pv[j]) {             cur -= sum(j);             if (j < i) kth[j] = nx[kth[j]];             cur += sum(j);           }           cur -= sum(nx[i]);           nx[pv[i]] = nx[i], pv[nx[i]] = pv[i];           cur += sum(nx[i]);         }       }     }     cout << ans <<   n ;     return 0;   }   