#include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e5 * 2 + 10;   int n, len, h;   struct node {     int flag, mx, l, r;   } t[MAXN << 2];   int a[MAXN], b[MAXN];   int L[MAXN];   void push_down(int k) {     if (t[k].flag) {       t[k << 1].flag += t[k].flag;       t[k << 1 | 1].flag += t[k].flag;       t[k << 1].mx += t[k].flag;       t[k << 1 | 1].mx += t[k].flag;       t[k].flag = 0;     }   }   void push_up(int k) { t[k].mx = min(t[k << 1].mx, t[k << 1 | 1].mx); }   void build(int l, int r, int k) {     t[k].l = l;     t[k].r = r;     t[k].flag = 0;     if (t[k].l == t[k].r) {       t[k].mx = -t[k].l;       return;     }     int mid = t[k].l + t[k].r >> 1;     build(l, mid, k << 1);     build(mid + 1, r, k << 1 | 1);     push_up(k);   }   void update(int l, int r, int val, int k) {     if (l <= t[k].l && t[k].r <= r) {       t[k].mx += val;       t[k].flag += val;       return;     }     push_down(k);     int mid = t[k].l + t[k].r >> 1;     if (l <= mid) update(l, r, val, k << 1);     if (r > mid) update(l, r, val, k << 1 | 1);     push_up(k);   }   int main() {     scanf( %d%d%d , &n, &len, &h);     for (int i = 1; i <= len; i++) scanf( %d , b + i);     sort(b + 1, b + len + 1);     build(1, len, 1);     for (int i = 1; i <= n; i++) {       scanf( %d , a + i);       int ll = 1, rr = len, ans = -1;       while (ll <= rr) {         int mid = ll + rr >> 1;         if (b[mid] + a[i] >= h) {           ans = mid;           rr = mid - 1;         } else           ll = mid + 1;       }       L[i] = ans;     }     int res = 0;     for (int i = 1; i <= n; i++) {       if (L[i] != -1) update(L[i], len, 1, 1);       if (i >= len) {         if (t[1].mx >= 0) res++;         if (L[i - len + 1] != -1) update(L[i - len + 1], len, -1, 1);       }     }     printf( %d n , res);     return 0;   }   