// #include #include using namespace std; using namespace atcoder; using ll = long long; #define rep(i, n) for (int i=0; i<(int)(n); ++(i)) #define rep3(i, m, n) for (int i=(m); (i)<(int)(n); ++(i)) #define repr(i, n) for (int i=(int)(n)-1; (i)>=0; --(i)) #define rep3r(i, m, n) for (int i=(int)(n)-1; (i)>=(int)(m); --(i)) #define all(x) (x).begin(), (x).end() const int INF = (int)(1e9); template struct BIT { int m, n; vector> d; BIT(int m=0, int n=0) : m(m), n(n), d(m+1, vector(n+1)) {} void add(int i, int j_, T x=1) { for (i++; i<=m; i+=i&-i) for (int j=j_+1; j<=n; j+=j&-j) d[i][j] += x; } T sum(int i, int j_) { T x = 0; for (i++; i; i-=i&-i) for (int j=j_+1; j; j-=j&-j) x += d[i][j]; return x; } T sum(int u, int l, int d, int r) { return sum(d-1, r-1) - sum(d-1, l-1) - sum(u-1, r-1) + sum(u-1, l-1); } }; int main() { int n, k, l, p; cin >> n >> k >> l >> p; vector a(n), b(n); rep(i, n) cin >> a[i] >> b[i]; ll res = 0; if (n == 1) { if (a[0]<=l && b[0]>=p) ++res; } else { int ln = n / 2, rn = n - ln; vector> lcosts(1<> lvals(1<> rlst(1< tvals(1<(lvals[i]); lcosts[get<2>(lvals[i])].second = i; } sort(all(lcosts)); rep(i, 1< bit(ln+1, (1<(rlst[ri]), rval = get<1>(rlst[ri]), tcost = l - rcost; int rki = get<2>(rlst[ri]); while (li<(1<(lvals[id]); bit.add(lki, id); ++li; } int tid = lower_bound(all(tvals), p-rval) - tvals.begin(), tki = min(ln+1, max(0, k-rki+1)); res += bit.sum(0, tid, tki, (1<