Levko loves strings of length n, consisting of lowercase English letters, very much. He has one such string s. For each string t of length n, Levko defines its beauty relative to s as the number of pairs of indexes i, j (1 ≤ i ≤ j ≤ n), such that substring t[i..j] is lexicographically larger than substring s[i..j].

The boy wondered how many strings t are there, such that their beauty relative to s equals exactly k. Help him, find the remainder after division this number by 1000000007 (109 + 7).

A substring s[i..j] of string s = s1s2... sn is string sisi + 1... sj.

String x = x1x2... xp is lexicographically larger than string y = y1y2... yp, if there is such number r (r < p), that x1 = y1, x2 = y2, ... , xr = yr and xr + 1 > yr + 1. The string characters are compared by their ASCII codes.

Input

The first line contains two integers n and k (1 ≤ n ≤ 2000, 0 ≤ k ≤ 2000).

The second line contains a non-empty string s of length n. String s consists only of lowercase English letters. 

Output

Print a single number — the answer to the problem modulo 1000000007 (109 + 7).

Examples

Input

2 2
yz


Output

26


Input

2 3
yx


Output

2


Input

4 7
abcd


Output

21962
import java.util.*;

public class Main {
    
    private static final long MOD = 1000000007;
    
    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(System.in);
        
        int N = scan.nextInt();
        int K = scan.nextInt();
        scan.nextLine();
        char[] arr = scan.nextLine().toCharArray();
        long[][] dp = new long[N + 1][K + 1];
        dp[0][0] = 1;
        long[] sum = new long[K + 1];
        sum[0] = 1;
        
        for (int i = 1; i <= N; i++) {
            for (int j = 0; j <= K; j++) {
                // be careful, the meaning of state (i,j) is a little strange
                dp[i][j] = (sum[j] * (arr[i - 1] - 'a')) % MOD;
                for (int prev = i - 1; prev >= 0; prev--) {
                    int add = (i - prev) * (N - i + 1);
                    if (add > j) {
                        break;
                    }
                    dp[i][j] = (dp[i][j] + dp[prev][j - add] * ('z' - arr[i - 1])) % MOD;
                }
                // be careful, the meaning of state (i,j) is a little strange
                sum[j] = (sum[j] + dp[i][j]) % MOD; // xxxxxEqual + (xxxxxSmall + xxxxxBig)
            }
        }
        
        long res = 0;
        for (int i = 0; i <= N; i++) {
            // be careful, the meaning of state (i,j) is a little strange 
            res = (res + dp[i][K]) % MOD;
        }
        System.out.println(res);
        scan.close();
    }
    
    private static void print(int[] arr) {
        System.out.print(arr[0]);
        for (int i = 1; i < arr.length; i++) {
            System.out.print(" ");
            System.out.print(arr[i]);
        }
        System.out.println();
    }
    
    private static void print(long[] arr) {
        System.out.print(arr[0]);
        for (int i = 1; i < arr.length; i++) {
            System.out.print(" ");
            System.out.print(arr[i]);
        }
        System.out.println();
    }
    
    private static void read(Scanner scan, int[]... arrs) {
        int len = arrs[0].length;
        for (int i = 0; i < len; i++) {
            for (int[] arr : arrs) {
                arr[i] = scan.nextInt();
            }
        }
    }
    
    private static void decreaseByOne(int[]... arrs) {
        for (int[] arr : arrs) {
            for (int i = 0; i < arr.length; i++) {
                arr[i] --;
            }
        }
    }
}