#include <bits/stdc++.h>   using namespace std;   const double eps = 1e-2;   struct cplx {     double x, y;     cplx(double x1 = 0, double x2 = 0) { x = x1, y = x2; }   } g[2000001], f[2000001];   cplx operator+(cplx a, cplx b) { return cplx(a.x + b.x, a.y + b.y); }   cplx operator-(cplx a, cplx b) { return cplx(a.x - b.x, a.y - b.y); }   cplx operator*(cplx a, cplx b) {     return cplx(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);   }   void swap(cplx &a, cplx &b) { swap(a.x, b.x), swap(a.y, b.y); }   int a[2000001], b[2000001];   int r[2000001];   const double Pi = acos(-1);   void fft(cplx f[], int op, int n) {     for (int i = 0; i < n; i++)       if (i < r[i]) swap(f[i], f[r[i]]);     for (int w = 2; w <= n; w <<= 1) {       int len = w / 2;       cplx tmp(cos(Pi / len), op * sin(Pi / len));       for (int k = 0; k < n; k += w) {         cplx buf(1, 0);         for (int l = k; l < k + len; l++) {           cplx tt = f[len + l] * buf;           f[len + l] = f[l] - tt;           f[l] = f[l] + tt;           buf = buf * tmp;         }       }     }     if (op == -1) {       for (int i = 0; i < n; i++) f[i].x /= n, f[i].y /= n;     }   }   char p[2000001];   char q[2000001];   int res[2000001];   int l1, l2, k, n, m;   void solve(char c) {     for (int i = 0; i <= n; i++) f[i].x = f[i].y = g[i].x = g[i].y = 0;     int far = -1;     for (int i = 0; i < l1; i++) {       if (p[i] == c) far = i + k;       if (i <= far) f[i].x = 1;     }     far = l1;     for (int i = l1 - 1; i >= 0; i--) {       if (p[i] == c) far = i - k;       if (i >= far) f[i].x = 1;     }     for (int i = 0; i < l2; i++)       if (q[i] == c) g[i].x = 1;     fft(f, 1, n);     fft(g, 1, n);     for (int i = 0; i < n; i++) f[i] = f[i] * g[i];     fft(f, -1, n);     for (int i = 0; i < n; i++) res[i] += (int)(f[i].x + eps);   }   signed main() {     int ans = 0;     scanf( %d%d%d , &l1, &l2, &k);     cin >> p;     cin >> q;     reverse(p, p + l1);     n = l1, m = l2;     for (m += n, n = 1; n <= m; n <<= 1)       ;     for (int i = 0; i < n; i++) r[i] = (r[i >> 1] >> 1) | ((i & 1) ? n >> 1 : 0);     solve( A );     solve( T );     solve( G );     solve( C );     for (int i = 0; i <= l1 - l2; i++)       if (res[l1 - i - 1] >= l2) ans++;     printf( %d , ans);     return 0;   }   