#include <bits/stdc++.h>
using namespace std;
clock_t start;
mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());
template <typename T>
void _F(const char *name, T arg1) {
  cerr << name << " = " << arg1 << '\n';
}
template <typename T, typename... Args>
void _F(const char *names, T arg1, Args... args) {
  const char *name = strchr(names, ',');
  cerr.write(names, name - names) << " = " << arg1 << '\n';
  _F(name + 2, args...);
}
template <typename T1, typename T2>
istream &operator>>(istream &in, pair<T1, T2> &q) {
  in >> q.first >> q.second;
  return in;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &out, pair<T1, T2> &q) {
  out << q.first << " " << q.second;
  return out;
}
template <typename T1, typename T2>
pair<T1, T2> operator+(pair<T1, T2> p1, pair<T1, T2> p2) {
  return {p1.first + p2.first, p1.second + p2.second};
}
template <typename T1, typename T2>
pair<T1, T2> operator-(pair<T1, T2> p1, pair<T1, T2> p2) {
  return {p1.first - p2.first, p1.second - p2.second};
}
template <typename T1, typename T2>
bool operator<(pair<T1, T2> p1, pair<T1, T2> p2) {
  return p1 < p2;
}
template <typename T>
void Unique(vector<T> &v) {
  sort((v).begin(), (v).end()),
      v.resize(distance(v.begin(), unique((v).begin(), (v).end())));
}
void solve(long long &test) {
  long long n, change;
  cin >> n >> change;
  string s, t;
  cin >> s >> t;
  if (t[0] == t[1]) {
    long long ans = 0;
    for (auto u : s) {
      if (u == t[0])
        ans++;
      else if (change)
        ans++, change--;
    }
    cout << ans * (ans - 1) / 2 << '\n';
    return;
  }
  long long dp[2][n + 5][n + 5][n + 5];
  for (long long ii = 0; ii < 2; ii++) {
    for (long long i = 0; i < n + 5; i++) {
      for (long long j = 0; j < n + 5; j++) {
        for (long long k = 0; k < n + 5; k++)
          dp[ii][i][j][k] = -(long long)(1e18);
      }
    }
  }
  dp[0][0][0][0] = 0;
  for (long long i = 1; i <= n; i++) {
    for (long long j = 0; j <= change; j++) {
      for (long long k = 0; k <= n; k++) {
        dp[0][i][j][k] = max(dp[0][i][j][k], dp[0][i - 1][j][k]);
        if (s[i - 1] == t[0]) {
          dp[0][i][j][k + 1] = max(dp[0][i][j][k + 1], dp[0][i - 1][j][k]);
          dp[0][i][j + 1][k] = max(dp[0][i][j + 1][k], dp[0][i - 1][j][k] + k);
        } else if (s[i - 1] == t[1]) {
          dp[0][i][j + 1][k + 1] =
              max(dp[0][i][j + 1][k + 1], dp[0][i - 1][j][k]);
          dp[0][i][j][k] = max(dp[0][i][j][k], dp[0][i - 1][j][k] + k);
        } else {
          dp[0][i][j + 1][k + 1] =
              max(dp[0][i][j + 1][k + 1], dp[0][i - 1][j][k]);
          dp[0][i][j + 1][k] = max(dp[0][i][j + 1][k], dp[0][i - 1][j][k] + k);
        }
      }
    }
  }
  long long ans = 0;
  for (long long j = 0; j <= change; j++) {
    for (long long k = 0; k <= n; k++) {
      ans = max(ans, dp[0][n][j][k]);
    }
  }
  cout << ans << '\n';
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  start = clock();
  long long test = 1;
  cout << fixed << setprecision(2);
  for (long long i = 1; i <= test; ++i) {
    solve(i);
  }
  cerr << (double(clock() - start) / double(CLOCKS_PER_SEC));
  return 0;
}
