#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int bit[N][5];
pair<int, int> dp[N];
int query(int x, int id) {
  int y = 0;
  while (x) {
    y += bit[x][id];
    x -= (x & -x);
  }
  return y;
}
int query(int l, int r, int id) { return query(r, id) - query(l - 1, id); }
void update(int x, int y, int id) {
  while (x < N) {
    bit[x][id] += y;
    x += (x & -x);
  }
}
int main(void) {
  int n;
  cin >> n;
  string s;
  cin >> s;
  int m;
  cin >> m;
  for (int i = 0; i < s.size(); i++) {
    if (s[i] == '?')
      update(i + 1, 1, 4);
    else if (s[i] == 'a') {
      if (i % 2)
        update(i + 1, 1, 0);
      else
        update(i + 1, 1, 1);
    } else {
      if (i % 2)
        update(i + 1, 1, 2);
      else
        update(i + 1, 1, 3);
    }
  }
  pair<int, int> melhor = make_pair(0, 0);
  for (int i = n; i >= 1; i--) {
    if (i + m <= n) {
      int k = i + m;
      if (dp[k].first > melhor.first)
        melhor = dp[k];
      else if (dp[k].first == melhor.first and dp[k].second < melhor.second)
        melhor = dp[k];
    }
    if (i + m - 1 > n) {
      dp[i] = make_pair(0, 0);
      continue;
    }
    int l = i, r = i + m - 1;
    int aFora = query(l, r, i % 2 ? 0 : 1);
    int bFora = query(l, r, i % 2 ? 3 : 2);
    if (aFora or bFora) {
      dp[i] = melhor;
    } else {
      int q = query(l, r, 4);
      dp[i] = make_pair(melhor.first + 1, melhor.second + q);
    }
    if (dp[i + 1].first > dp[i].first)
      dp[i] = dp[i + 1];
    else if (dp[i + 1].first == dp[i].first and dp[i + 1].second < dp[i].second)
      dp[i] = dp[i + 1];
  }
  cout << dp[1].second << endl;
  return 0;
}
