#include <bits/stdc++.h>
using namespace std;
const long long nmax = (long long)1e6 + 10;
inline long long up(char ch) { return 'z' - ch; }
inline long long lo(char ch) { return ch - 'a'; }
inline long long eq(char ch) { return 1; }
long long dp[2002][2002];
long long tmp[2002];
signed main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  long long n, k;
  cin >> n >> k;
  string s;
  cin >> s;
  memset(dp, 0, sizeof dp);
  dp[n][0] = 1;
  for (long long i = n - 1; i >= 0; i--) {
    for (long long j = 0; j <= k; j++) {
      if (j - (n - i) >= 0)
        dp[i][j] = (up(s[i]) * dp[i + 1][j - (n - i)]) % 1000000007;
      dp[i][j] += (lo(s[i]) * dp[i + 1][j]) % 1000000007;
      dp[i][j] %= 1000000007;
      long long last = i;
      for (long long t = i + 1; t < n; t++) {
        if (j - (n - t) * (t - i + 1) >= 0) {
          dp[i][j] +=
              (up(s[t]) * dp[t + 1][j - (n - t) * (t - i + 1)]) % 1000000007;
          dp[i][j] %= 1000000007;
          last = t;
        } else {
          break;
        }
      }
      for (long long t = n - 1; t > last; t--) {
        if (j - (n - t) * (t - i + 1) >= 0) {
          dp[i][j] +=
              (up(s[t]) * dp[t + 1][j - (n - t) * (t - i + 1)]) % 1000000007;
          dp[i][j] %= 1000000007;
        } else {
          break;
        }
      }
      dp[i][j] += tmp[j];
      dp[i][j] %= 1000000007;
      if (j == 0) {
        dp[i][j]++;
        dp[i][j] %= 1000000007;
      }
      tmp[j] = tmp[j] + (lo(s[i]) * dp[i + 1][j]) % 1000000007;
      tmp[j] %= 1000000007;
    }
  }
  cout << dp[0][k] << endl;
  return 0;
}
