#include <bits/stdc++.h>
using namespace std;
int dp[201][201][201];
int main() {
  int n, k;
  cin >> n >> k;
  string s;
  cin >> s;
  string t;
  cin >> t;
  vector<int> count(n + 1, 0);
  for (int i = 0; i < n; i++) {
    count[i + 1] = count[i];
    if (s[i] == t[0]) count[i + 1]++;
  }
  if (t[0] == t[1]) {
    int x = min(n, count[n] + k);
    int ans = (x * (x - 1)) / 2;
    cout << ans << endl;
    return 0;
  }
  int dp[n + 1][k + 1][n + 1];
  bool possible[n + 1][k + 1][n + 1];
  for (int j = 0; j <= k; j++) {
    for (int i = 0; i <= n; i++) {
      dp[0][i][j] = 0;
    }
  }
  for (int j = 0; j <= k; j++) {
    for (int i = 0; i <= n; i++) {
      possible[0][i][j] = 0;
    }
  }
  for (int i = 0; i <= k; i++) {
    possible[0][i][0] = 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      if (j != count[i])
        possible[i][0][j] = 0;
      else {
        possible[i][0][j] = 1;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      if (j != count[i])
        dp[i][0][j] = 0;
      else {
        if (s[i - 1] == t[0])
          dp[i][0][j] = dp[i - 1][0][j - 1];
        else if (s[i - 1] == t[1])
          dp[i][0][j] = dp[i - 1][0][j] + j;
        else
          dp[i][0][j] = dp[i - 1][0][j];
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= k; j++) {
      if (j < count[i])
        possible[i][j][0] = 0;
      else
        possible[i][j][0] = 1;
    }
  }
  for (int l = 1; l <= k; l++) {
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        if (j > i) {
          possible[i][l][j] = 0;
          continue;
        }
        if (s[i - 1] == t[0]) {
          if (j > 0)
            possible[i][l][j] =
                (possible[i - 1][l][j - 1] || possible[i - 1][l - 1][j]);
          else
            possible[i][l][j] = possible[i - 1][l - 1][j];
        } else {
          if (j > 0)
            possible[i][l][j] =
                (possible[i - 1][l][j] || possible[i - 1][l - 1][j - 1]);
          else
            possible[i][l][j] = possible[i - 1][l][j];
        }
      }
    }
  }
  for (int l = 1; l <= k; l++) {
    for (int i = 1; i <= n; i++) {
      for (int j = 0; j <= n; j++) {
        dp[i][l][j] = 0;
        if (!possible[i][l][j]) {
          continue;
        }
        if (s[i - 1] == t[0]) {
          if (j > 0)
            dp[i][l][j] = dp[i - 1][l][j - 1];
          else
            dp[i][l][j] = 0;
          if (possible[i - 1][l - 1][j])
            dp[i][l][j] = max(dp[i - 1][l - 1][j] + j, dp[i][l][j]);
        } else if (s[i - 1] == t[1]) {
          if (possible[i - 1][l][j]) dp[i][l][j] = dp[i - 1][l][j] + j;
          if (j > 0 && possible[i - 1][l - 1][j - 1])
            dp[i][l][j] = max(dp[i - 1][l - 1][j - 1], dp[i][l][j]);
        } else {
          if (possible[i - 1][l][j])
            dp[i][l][j] = max(dp[i - 1][l][j], dp[i][l][j]);
          if (j > 0 && possible[i - 1][l - 1][j - 1])
            dp[i][l][j] = max(dp[i][l][j], dp[i - 1][l - 1][j - 1]);
          if (possible[i - 1][l - 1][j])
            dp[i][l][j] = max(dp[i][l][j], dp[i - 1][l - 1][j] + j);
        }
      }
    }
  }
  int ans = 0;
  for (int i = 0; i <= n; i++) {
    ans = max(ans, dp[n][k][i]);
  }
  cout << ans << endl;
}
