#include <bits/stdc++.h>
using namespace std;
mt19937 rd(chrono ::steady_clock ::now().time_since_epoch().count());
long long Rand(long long l, long long h) { return l + rd() % (h - l + 1); }
inline void read() {}
template <typename T, typename... tail>
inline void read(T &x, tail &...thang) {
  register char c;
  bool sign = 0;
  for (c = getchar(); !isdigit(c); c = getchar())
    if (c == '-') sign = !sign;
  x = c - '0';
  for (c = getchar(); isdigit(c); c = getchar()) x = x * 10 + c - '0';
  if (sign) x = -x;
  read(thang...);
}
template <typename T>
inline bool mini(T &x, T y) {
  if (x > y)
    x = y;
  else
    return 0;
  return 1;
}
template <typename T>
inline bool maxi(T &x, T y) {
  if (x < y)
    x = y;
  else
    return 0;
  return 1;
}
template <typename T>
inline void _abs(T &x) {
  if (x < 0) x = -x;
  return;
}
using namespace std;
const int N = 201;
int n, k;
string s, t;
long long dp[N][N][N][4];
long long res;
void solve() {
  int dem = 0;
  for (int i = 1; i <= n; ++i) {
    if (s[i] == t[0]) {
      res += dem;
      dem++;
    } else {
      if (k == 0) continue;
      k--;
      res += dem;
      dem++;
    }
  }
  cout << res;
}
inline void Inc1(int i, int j, int cnt) {
  int Count = 0;
  if (s[i] == t[0] || s[i] == t[1]) Count = 1;
  if (j - Count < 0) return;
  auto &Ft = dp[i][j][cnt][0];
  for (int k = 0; k <= 2; ++k) maxi(Ft, dp[i - 1][j - Count][cnt][k]);
  maxi(res, Ft);
}
inline void Inc2(int i, int j, int cnt) {
  int Count = 0;
  if (s[i] != t[0]) Count = 1;
  if (j - Count < 0) return;
  if (cnt == 0) return;
  auto &Ft = dp[i][j][cnt][1];
  for (int k = 0; k <= 2; ++k) maxi(Ft, dp[i - 1][j - Count][cnt - 1][k]);
  maxi(res, Ft);
}
inline void Inc3(int i, int j, int cnt) {
  int Count = 0;
  if (s[i] != t[1]) Count = 1;
  if (j - Count < 0) return;
  auto &Ft = dp[i][j][cnt][2];
  for (int k = 0; k <= 2; ++k) maxi(Ft, dp[i - 1][j - Count][cnt][k] + cnt);
  maxi(res, Ft);
}
int main() {
  ios ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k >> s;
  s = " " + s;
  cin >> t;
  if (t[0] == t[1]) {
    solve();
    return 0;
  }
  memset(dp, -64, sizeof(dp));
  dp[0][0][0][0] = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= k; ++j) {
      for (int cnt = 0; cnt <= i; ++cnt) {
        Inc1(i, j, cnt);
        Inc2(i, j, cnt);
        Inc3(i, j, cnt);
      }
      int Thang = 0;
      for (int m = 1; m <= 5; ++m) ++Thang;
    }
  }
  cout << res;
  return 0;
}
