#include <bits/stdc++.h>
using namespace std;
int n, m, a[100005], t, b, g, d[100005][5], d2[100005], ans;
int main() {
  scanf("%d\n", &n);
  d2[0] = 0;
  for (int i = 1; i <= n; i++) {
    char c = getchar();
    while (c != 'a' && c != 'b' && c != '?') c = getchar();
    a[i] = c - 'a' + 1;
    if (a[i] != 1 && a[i] != 2) a[i] = 3;
    d2[i] = d2[i - 1] + (a[i] == 3);
  }
  memset(d, 0, sizeof(d));
  d[n][1] = (a[n] != 2), d[n][2] = (a[n] != 1);
  for (int i = n - 1; i >= 1; i--) {
    if (a[i] == 1) {
      d[i][2] = 0;
      if (a[i + 1] == 1) {
        d[i][1] = 1;
        continue;
      }
      d[i][1] = d[i + 1][2] + 1;
    } else if (a[i] == 2) {
      d[i][1] = 0;
      if (a[i + 1] == 2) {
        d[i][2] = 1;
      }
      d[i][2] = d[i + 1][1] + 1;
    } else {
      d[i][1] = d[i + 1][2] + 1, d[i][2] = d[i + 1][1] + 1;
    }
  }
  scanf("%d", &m);
  for (int i = 1; i <= n; i++) {
    if (d[i + 1][3] < d[i][3]) {
      d[i + 1][3] = d[i][3], d[i + 1][4] = d[i][4];
    } else if (d[i + 1][3] == d[i][3]) {
      d[i + 1][4] = min(d[i + 1][4], d[i][4]);
    }
    if (d[i][1] >= m) {
      int x = d2[i + m - 1] - d2[i - 1], y = d[i][3];
      if (d[i + m][3] < y + 1) {
        d[i + m][3] = y + 1, d[i + m][4] = d[i][4] + x;
      } else if (d[i + m][3] == y + 1) {
        d[i + m][4] = max(d[i + m][4], d[i][4] + x);
      }
    }
  }
  printf("%d", d[n + 1][4]);
  return 0;
}
