func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 2e5 + 5;   const long long inf = 1e16 + 7;   long long m, n, h;   long long ans = 0;   long long seg[4 * N];   long long lazy[4 * N];   long long ind[N];   vector<long long> b;   vector<long long> a;   void build(long long p, long long val, long long v = 1, long long s = 0,              long long e = n + 1) {     if (e - s == 1) {       seg[v] = val;       return;     }     long long mid = (e + s) / 2;     long long lc = 2 * v;     long long rc = lc + 1;     if (p < mid) {       build(p, val, lc, s, mid);     } else {       build(p, val, rc, mid, e);     }     seg[v] = min(seg[lc], seg[rc]);   }   void shift(long long v, long long s, long long e) {     long long mid = (s + e) / 2;     long long lc = 2 * v;     long long rc = lc + 1;     seg[lc] += lazy[v];     seg[rc] += lazy[v];     lazy[lc] += lazy[v];     lazy[rc] += lazy[v];     lazy[v] = 0;   }   void add(long long l, long long r, long long val, long long v = 1,            long long s = 0, long long e = n + 1) {     if (r <= s || e <= l) {       return;     }     if (l <= s && e <= r) {       seg[v] += val;       lazy[v] += val;       return;     }     shift(v, s, e);     long long mid = (s + e) / 2;     long long lc = 2 * v;     long long rc = lc + 1;     add(l, r, val, lc, s, mid);     add(l, r, val, rc, mid, e);     seg[v] = min(seg[lc], seg[rc]);   }   long long get(long long l, long long r, long long v = 1, long long s = 0,                 long long e = n + 1) {     if (r <= s || e <= l) {       return inf;     }     if (l <= s && e <= r) {       return seg[v];     }     shift(v, s, e);     long long mid = (s + e) / 2;     long long lc = 2 * v;     long long rc = lc + 1;     return min(get(l, r, lc, s, mid), get(l, r, rc, mid, e));   }   int main() {     memset(seg, 127, sizeof seg);     cin >> m >> n >> h;     for (long long i = 0; i < n; i++) {       long long tmp;       cin >> tmp;       b.push_back(tmp);     }     for (long long i = 0; i < m; i++) {       long long tmp;       cin >> tmp;       a.push_back(tmp);     }     sort(b.begin(), b.end());     for (long long i = 0; i < m; i++) {       ind[i] = lower_bound(b.begin(), b.end(), h - a[i]) - b.begin();     }     for (long long i = 0; i <= n; i++) {       build(i, n - i);     }     for (long long i = 0; i <= n; i++) {     }     for (long long i = 0; i < n; i++) {       add(0, ind[i] + 1, -1);     }     if (get(0, n + 1) >= 0) {       ans++;     }     for (long long i = n; i < m; i++) {       add(0, ind[i - n] + 1, +1);       add(0, ind[i] + 1, -1);       if (get(0, n + 1) >= 0) {         ans++;       }     }     cout << ans << endl;   }   