#include <bits/stdc++.h>
using namespace std;
long long int dp[205][205][205];
long long int recur(string &a, string &b, long long int index, long long int k,
                    long long int curr) {
  if (index == a.size()) {
    return 0;
  }
  if (dp[index][k][curr] != -1) {
    return dp[index][k][curr];
  }
  if (k > 0) {
    if (a[index] == b[0]) {
      return dp[index][k][curr] =
                 max(recur(a, b, index + 1, k, curr + 1),
                     curr + recur(a, b, index + 1, k - 1, curr));
    } else if (a[index] == b[1]) {
      return dp[index][k][curr] = max(curr + recur(a, b, index + 1, k, curr),
                                      recur(a, b, index + 1, k - 1, curr + 1));
    } else {
      return dp[index][k][curr] =
                 max(recur(a, b, index + 1, k, curr),
                     max(curr + recur(a, b, index + 1, k - 1, curr),
                         recur(a, b, index + 1, k - 1, curr + 1)));
    }
  } else {
    if (a[index] == b[1]) {
      return dp[index][k][curr] = curr + recur(a, b, index + 1, k, curr);
    } else if (a[index] == b[0]) {
      return dp[index][k][curr] = recur(a, b, index + 1, k, curr + 1);
    } else {
      return dp[index][k][curr] = recur(a, b, index + 1, k, curr);
    }
  }
}
void solve() {
  long long int n, k;
  cin >> n >> k;
  string a, b;
  cin >> a >> b;
  memset(dp, -1, sizeof(dp));
  if (b[0] == b[1]) {
    long long int curr = 0;
    for (int i = 0; i < a.size(); i++) {
      if (a[i] == b[0]) {
        curr++;
      }
    }
    curr = min(curr + k, n);
    long long int res = (curr) * (curr - 1);
    res = res >> 1;
    cout << res << "\n";
  } else {
    cout << recur(a, b, 0, k, 0) << "\n";
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
