#include <bits/stdc++.h>
using namespace std;
struct _IO {
  _IO() {
    ios::sync_with_stdio(0);
    cin.tie(0);
  }
} _io;
using ll = long long;
using db = long double;
using pi = pair<int, int>;
using mi = map<int, int>;
const int N = 6e5 + 5, M = 1e9 + 7;
using vi = vector<int>;
ll ri() {
  ll x;
  cin >> x;
  return x;
}
void prl() { cout << '\n'; }
template <class T, class... U>
void prl(T x, U... y) {
  cout << x << ' ', prl(y...);
}
template <class T, class U>
ostream &operator<<(ostream &out, pair<T, U> p) {
  out << "(" << p.first << ", " << p.second << ")";
  return out;
}
template <class T>
ostream &operator<<(ostream &out, vector<T> &v) {
  cout << "{";
  for (int i = (0); i < (v.size()); ++i) {
    if (i) cout << ", ";
    cout << v[i];
  }
  cout << "}";
  return out;
}
struct cp {
  db x, y;
  cp(db a = 0, db b = 0) : x(a), y(b) {}
  cp operator-(const cp &b) const { return cp(x - b.x, y - b.y); }
  cp operator+(const cp &b) const { return cp(x + b.x, y + b.y); }
  cp operator*(const cp &b) const {
    return cp(x * b.x - y * b.y, x * b.y + y * b.x);
  }
  cp operator/(const int &b) const { return cp(x / b, y / b); }
};
const db PI = acos(-1);
int rev[N];
void init(int n) {
  for (int i = 0, lim = __builtin_ctz(n); i < n; i++)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (lim - 1));
}
void fft(cp *a, int n, int f) {
  for (int i = 0; i < n; i++)
    if (i < rev[i]) swap(a[i], a[rev[i]]);
  for (int l = 2, m = 1; l <= n; m = l, l <<= 1)
    for (cp *p = a, wn(cos(2 * PI / l), sin(f * 2 * PI / l)); p != a + n;
         p += l)
      for (cp *q = p, w(1, 0); q != p + m; q++, w = w * wn) {
        cp t = *(q + m) * w;
        *(q + m) = *q - t;
        *q = *q + t;
      }
  if (f == -1)
    for (int i = 0; i < n; i++) a[i] = a[i] / n;
}
cp a[N];
signed main() {
  int n = ri(), m = ri(), k = ri();
  string s, t, p = "ATCG";
  cin >> s >> t;
  int len = 1;
  while (len < n + m) len *= 2;
  init(len);
  vi ans(len), sum(n + 1);
  for (int c = (0); c < (4); ++c) {
    memset(a, 0, sizeof a);
    for (int i = (0); i < (n); ++i) {
      if (s[i] == p[c]) {
        sum[i + 1] = 1;
      } else {
        sum[i + 1] = 0;
      }
      sum[i + 1] = sum[i] + sum[i + 1];
    }
    for (int i = (0); i < (n); ++i) {
      if (sum[min(n, i + k + 1)] - sum[max(0, i - k)] >= 1) {
        a[i].x = 1;
      }
    }
    for (int i = (0); i < (m); ++i) {
      if (t[i] == p[c]) {
        a[m - i - 1].y = 1;
      }
    }
    fft(a, len, 1);
    for (int i = (0); i < (len); ++i) {
      a[i] = a[i] * a[i];
    }
    fft(a, len, -1);
    for (int i = (0); i < (len); ++i) {
      ans[i] += (int)(a[i].y / 2 + 0.5);
    }
  }
  int cnt = 0;
  for (int i = (0); i < (n); ++i)
    if (ans[i] == m) ++cnt;
  prl(cnt);
}
