func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 1000 * 1000 * 1000;   const double PI = acos(-1.0);   const int MAX = 150005;   int n, len, h;   pair<int, int> a[MAX];   int b[MAX];   pair<int, int> T[MAX * 8];   int lazy[MAX * 8];   bool pzdc[MAX];   void push(int v) {     T[v].first += lazy[v];     lazy[v * 2] += lazy[v];     lazy[v * 2 + 1] += lazy[v];     lazy[v] = 0;   }   void upd(int v, int tl, int tr, int l, int r, int delta) {     push(v);     if (l > r) return;     if (tl == l && tr == r) {       lazy[v] += delta;       push(v);       return;     }     int tm = (tl + tr) / 2;     upd(v * 2, tl, tm, l, min(r, tm), delta);     upd(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, delta);     T[v] = min(T[v * 2], T[v * 2 + 1]);   }   void build(int v, int tl, int tr) {     if (tl == tr) {       T[v].second = tl;       return;     }     int tm = (tl + tr) / 2;     build(v * 2, tl, tm);     build(v * 2 + 1, tm + 1, tr);     T[v] = min(T[v * 2], T[v * 2 + 1]);   }   int main() {     ios_base::sync_with_stdio(0);     cin >> n >> len >> h;     build(1, 0, n - len);     for (int i = 0; i < len; i++) cin >> b[i];     sort(b, b + len);     for (int i = 0; i < n; i++) {       cin >> a[i].first;       a[i].second = i;     }     sort(a, a + n);     int ptr = n - 1;     for (int i = 0; i < len; i++) {       while (ptr >= 0 && a[ptr].first + b[i] >= h) {         upd(1, 0, n - len, max(0, a[ptr].second - len + 1),             min(n - len, a[ptr].second), 1);         ptr--;       }       while (T[1].first <= i) {         pzdc[T[1].second] = 1;         upd(1, 0, n - len, T[1].second, T[1].second, INF);       }     }     int ans = 0;     for (int i = 0; i < n - len + 1; i++) ans += !pzdc[i];     cout << ans;   }   