#include <bits/stdc++.h>
using namespace std;
int mn[150000 * 4], flag[150000 * 4];
void push_down(int u) {
  mn[(u << 1)] += flag[u];
  mn[((u << 1) + 1)] += flag[u];
  flag[(u << 1)] += flag[u];
  flag[((u << 1) + 1)] += flag[u];
  flag[u] = 0;
}
void build(int u, int L, int R, int N) {
  if (R == L + 1) {
    mn[u] = L - N;
    return;
  }
  build((u << 1), L, ((L + R) >> 1), N);
  build(((u << 1) + 1), ((L + R) >> 1), R, N);
  mn[u] = min(mn[(u << 1)], mn[((u << 1) + 1)]);
}
void update(int u, int L, int R, int l, int r, int x) {
  l = max(L, l);
  r = min(R, r);
  if (l >= r) return;
  if (l == L && R == r) {
    flag[u] += x;
    mn[u] += x;
    return;
  }
  push_down(u);
  update((u << 1), L, ((L + R) >> 1), l, r, x);
  update(((u << 1) + 1), ((L + R) >> 1), R, l, r, x);
  mn[u] = min(mn[(u << 1)], mn[((u << 1) + 1)]);
}
int N, M, H;
int b[150000], a[150000];
int main() {
  scanf("%d%d%d", &N, &M, &H);
  for (int i = 0; i < M; i++) scanf("%d", &b[i]);
  for (int i = 0; i < N; i++) scanf("%d", &a[i]);
  for (int i = 0; i < M; i++) b[i] = H - b[i];
  sort(b, b + M);
  int ans = 0;
  build(1, 0, M, M);
  for (int i = 0, j = 0; i <= N - M; i++) {
    while (j < i + M) {
      int k = upper_bound(b, b + M, a[j]) - b;
      if (k > 0) update(1, 0, M, 0, k, 1);
      j++;
    }
    if (mn[1] >= 0) ans++;
    int k = upper_bound(b, b + M, a[i]) - b;
    if (k > 0) update(1, 0, M, 0, k, -1);
  }
  printf("%d\n", ans);
  return 0;
}
