#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
void in(int &x);
const int N = 205;
int n, k;
int dp[N][N][N];
char s[N], t[2];
int f(int cur, int rem, int t0Amount) {
  if (cur >= n) return 0;
  int &sol = dp[cur][rem][t0Amount];
  if (sol != -1) return sol;
  sol = 0;
  if (s[cur] == t[0]) {
    sol = max(sol, f(cur + 1, rem, t0Amount + 1));
    if (rem) {
      sol = max(sol, f(cur + 1, rem - 1, t0Amount) + t0Amount);
    }
  } else if (s[cur] == t[1]) {
    sol = max(sol, f(cur + 1, rem, t0Amount) + t0Amount);
    if (rem) {
      sol = max(sol, f(cur + 1, rem - 1, t0Amount + 1));
    }
  } else {
    if (rem) {
      sol = max(sol, f(cur + 1, rem - 1, t0Amount + 1));
      sol = max(sol, f(cur + 1, rem - 1, t0Amount) + t0Amount);
    }
    sol = max(sol, f(cur + 1, rem, t0Amount));
  }
  return sol;
}
void work() {
  scanf("%d%d", &n, &k);
  scanf("%s", s);
  scanf("%s", t);
  if (t[0] == t[1]) {
    int sol = 0;
    for (int i = 0; i < n; i++) {
      if (s[i] == t[0]) {
        sol++;
      } else {
        if (k) sol++, k--;
      }
    }
    printf("%d\n", (sol * (sol - 1)) / 2);
    return;
  }
  memset(dp, -1, sizeof dp);
  printf("%d\n", f(0, k, 0));
  return;
}
int main() {
  work();
  return 0;
}
void in(int &x) {
  bool neg = false;
  register int c;
  x = 0;
  c = getchar();
  if (c == '-') {
    neg = true;
    c = getchar();
  }
  for (; c > 47 && c < 58; c = getchar()) x = (x << 1) + (x << 3) + c - 48;
  if (neg) x *= -1;
}
