#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2 * int(1e3) + 10;
const int MOD = 1000000007;
int mul(int a, int b) { return int(a * 1ll * b % MOD); }
void add(int& a, int b) {
  if ((a += b) >= MOD) a -= MOD;
}
int dp[2][MAXN][MAXN];
char s[MAXN];
int n, k;
int solve() {
  for (int i = 0; i < int(n + 1); i++)
    for (int j = 0; j < int(k + 1); j++)
      for (int c = 0; c < int(2); c++) dp[c][i][j] = 0;
  dp[0][0][0] = 1;
  for (int i = 0; i < n; i++)
    for (int have = 0; have <= k; have++)
      for (int bad = 0; bad <= 1; bad++)
        if (dp[bad][i][have] != 0) {
          int cur_dp = dp[bad][i][have];
          if (bad == 1) {
            add(dp[0][i + 1][have], mul(cur_dp, int(s[i] - 'a')));
            add(dp[1][i + 1][have], cur_dp);
            continue;
          }
          add(dp[1][i][have], cur_dp);
          for (int j = i; j <= (n + i) / 2; j++) {
            int nhave = (j - i + 1) * (n - j);
            nhave += have;
            if (nhave > k) break;
            int ndp = mul(cur_dp, int('z' - s[j]));
            add(dp[0][j + 1][nhave], ndp);
          }
          for (int j = n - 1; j > (n + i) / 2; j--) {
            int nhave = (j - i + 1) * (n - j);
            nhave += have;
            if (nhave > k) break;
            int ndp = mul(cur_dp, int('z' - s[j]));
            add(dp[0][j + 1][nhave], ndp);
          }
        }
  int ans = dp[0][n][k];
  add(ans, dp[1][n][k]);
  return ans;
}
int main() {
  scanf("%d%d\n", &n, &k);
  gets(s);
  printf("%d\n", solve());
  return 0;
}
