#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;
}
