func_code_string: #include <bits/stdc++.h>   using namespace std;   const int NN = 150000 + 10;   int N, M, H;   int b[NN], a[NN];   int _max[NN << 2];   int add[NN << 2];   void up(int idx) { _max[idx] = max(_max[idx << 1], _max[idx << 1 | 1]); }   void build(int l, int r, int idx) {     _max[idx] = -100000000;     add[idx] = 0;     if (l == r) {       _max[idx] = -M - 1 + l;       return;     }     int mid = (l + r) >> 1;     build(l, mid, idx << 1);     build(mid + 1, r, idx << 1 | 1);     up(idx);   }   void down(int idx) {     int ls = idx << 1, rs = idx << 1 | 1;     if (add[idx]) {       add[ls] += add[idx];       add[rs] += add[idx];       _max[ls] += add[idx];       _max[rs] += add[idx];       add[idx] = 0;     }   }   void update(int idx, int l, int r, int a, int b, int val) {     if (l == a && r == b) {       _max[idx] += val;       add[idx] += val;       return;     }     down(idx);     int mid = (l + r) >> 1;     if (b <= mid)       update(idx << 1, l, mid, a, b, val);     else if (a > mid)       update(idx << 1 | 1, mid + 1, r, a, b, val);     else {       update(idx << 1, l, mid, a, mid, val);       update(idx << 1 | 1, mid + 1, r, mid + 1, b, val);     }     up(idx);   }   int main() {     while (cin >> N >> M >> H) {       for (int i = 1; i < (int)(M + 1); ++i) cin >> b[i];       sort(b + 1, b + 1 + M);       for (int i = 1; i < (int)(N + 1); ++i) {         cin >> a[i];         a[i] = H - a[i];         a[i] = lower_bound(b + 1, b + 1 + M, a[i]) - b;       }       build(1, M + 1, 1);       int ans = 0;       for (int i = 1; i < (int)(N + 1); ++i) {         update(1, 1, M + 1, 1, a[i], 1);         if (i > M) {           update(1, 1, M + 1, 1, a[i - M], -1);         }         if (i >= M) {           ans += (_max[1] <= 0);         }       }       cout << ans << endl;     }     return 0;   }   