#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long powmod(long long a, long long b, long long MOD) {
  if (a == 0ll) {
    return 0ll;
  }
  a %= MOD;
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = ans * a % MOD;
    }
    a = a * a % MOD;
    b >>= 1;
  }
  return ans;
}
long long poww(long long a, long long b) {
  if (a == 0ll) {
    return 0ll;
  }
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = ans * a;
    }
    a = a * a;
    b >>= 1;
  }
  return ans;
}
void Pv(const vector<int> &V) {
  int Len = int(V.size());
  for (int i = 0; i < Len; ++i) {
    printf("%d", V[i]);
    if (i != Len - 1) {
      printf(" ");
    } else {
      printf("\n");
    }
  }
}
void Pvl(const vector<long long> &V) {
  int Len = int(V.size());
  for (int i = 0; i < Len; ++i) {
    printf("%lld", V[i]);
    if (i != Len - 1) {
      printf(" ");
    } else {
      printf("\n");
    }
  }
}
inline long long readll() {
  long long tmp = 0, fh = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') fh = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') tmp = tmp * 10 + c - 48, c = getchar();
  return tmp * fh;
}
inline int readint() {
  int tmp = 0, fh = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') fh = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') tmp = tmp * 10 + c - 48, c = getchar();
  return tmp * fh;
}
void pvarr_int(int *arr, int n, int strat = 1) {
  if (strat == 0) {
    n--;
  }
  for (int i = strat; i <= n; i++) {
    printf("%d%c", arr[i], i == n ? '\n' : ' ');
  }
}
void pvarr_LL(long long *arr, int n, int strat = 1) {
  if (strat == 0) {
    n--;
  }
  for (int i = strat; i <= n; i++) {
    printf("%lld%c", arr[i], i == n ? '\n' : ' ');
  }
}
const int maxn = 205;
const int inf = 0x3f3f3f3f;
int n;
int k;
char s[maxn];
char t[maxn];
int main() {
  cin >> n >> k;
  cin >> s;
  cin >> t;
  std::vector<vector<vector<int>>> dp(
      n + 1, vector<vector<int>>(n + 1, vector<int>(n + 1, -inf)));
  dp[0][0][0] = 0;
  for (int i = 0; i <= n - 1; i++) {
    for (int j = 0; j <= k; j++) {
      for (int cnt0 = 0; cnt0 <= n; cnt0++) {
        if (dp[i][j][cnt0] == -inf) continue;
        int e0 = s[i] == t[0];
        int e1 = s[i] == t[1];
        int e01 = t[0] == t[1];
        dp[i + 1][j][cnt0 + e0] =
            max(dp[i + 1][j][cnt0 + e0], dp[i][j][cnt0] + (e1 ? cnt0 : 0));
        if (j < k) {
          dp[i + 1][j + 1][cnt0 + 1] = max(dp[i + 1][j + 1][cnt0 + 1],
                                           dp[i][j][cnt0] + (e01 ? cnt0 : 0));
          dp[i + 1][j + 1][cnt0 + e01] =
              max(dp[i + 1][j + 1][cnt0 + e01], dp[i][j][cnt0] + cnt0);
        }
      }
    }
  }
  int ans = 0;
  for (int j = 0; j <= k; j++) {
    for (int cnt0 = 0; cnt0 <= n; cnt0++) {
      ans = max(ans, dp[n][j][cnt0]);
    }
  }
  printf("%d\n", ans);
  return 0;
}
