#include <bits/stdc++.h>
using namespace std;
const int DEBUG = 0;
namespace defs {
template <class Type>
Type read() {
  Type aa;
  int bb = 1, ch;
  while (ch = getchar(), (ch < '0' || ch > '9') && ch != '-')
    ;
  ch == '-' ? aa = 0, bb = -1 : aa = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') aa = aa * 10 + ch - '0';
  return bb == 1 ? aa : -aa;
}
const unsigned int rand_x = 11309;
const unsigned int rand_y = 1000000019;
unsigned int rand_cur;
unsigned int rand_int() { return rand_cur = rand_cur * rand_x + rand_y; }
const int inf = 1071026353;
const int modx = 998244353;
}  // namespace defs
namespace lightningwork {
const int mod = 1000000007;
int (*read)() = defs::read<int>;
int n, k;
char str[2333];
int f[2333][2333], g[2333][2333];
void work() {
  n = read();
  k = read();
  scanf("%s", str + 1);
  f[0][0] = g[0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= k; ++j) {
      f[i][j] = 1ll * g[i - 1][j] * (str[i] - 'a') % mod;
      for (int l = 0, t; l < i && (t = (l + 1) * (n - i + 1)) <= j; ++l)
        (f[i][j] += 1ll * f[i - l - 1][j - t] * ('z' - str[i]) % mod) %= mod;
      g[i][j] = (g[i - 1][j] + f[i][j]) % mod;
    }
  }
  printf("%d\n", g[n][k]);
}
}  // namespace lightningwork
int main() {
  if (0)
    freopen(
        "work"
        ".in",
        "r", stdin),
        freopen(
            "work"
            ".out",
            "w", stdout);
  lightningwork::work();
  if (0) fclose(stdin), fclose(stdout);
  return 0;
}
