#include <bits/stdc++.h>
using namespace std;
#define int              long long int
#define double           long double
#define print(a)         for(auto x : a) cout << x << " "; cout << endl


const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;

inline int power(int a, int b, int mod=M) {
    int x = 1;
    a %= mod;
    while (b) {
        if (b & 1) x = (x * a) % mod; 
        a = (a * a) % mod;
        b >>= 1;
    }
    return x;
}


//_ ***************************** START Below *******************************



string str;
vector<int> a;

int consistency1(int n, int k){

	vector<vector<int>> dp(n+1, vector<int>(k+1, 0));
	dp[0][0] = 1;
	dp[1][1] = 1;
	
	
	for(int i=2; i<=n; i++){
		
		for(int x=1; x<=k; x++){
			vector<int> f(26, 0);
			
			f[str[i-1]-'a']++;
			
			int j = i-1;
			while(j>=0){
				bool isValid = true;
				
				for(int p=0; p<26; p++){
					if(f[p] == 0) continue;
					if(f[p] > a[p]){
						isValid = false;
						break;
					}
				}
				
				if(!isValid) break;
				
				dp[i][x] += dp[j][x-1];
				
				if(j-1>=0) f[str[j-1]-'a']++;
				j--;
			}
		}
	}
	
	return dp[n][k];

}







int consistency2(int n, int k){

	vector<vector<int>> dp(n+1, vector<int>(k+1, 0));
	vector<vector<int>> prefixDp(n+1, vector<int>(k+1, 0));
	
	dp[0][0] = 1;
	prefixDp[0][0] = 1;
	
	for(int i=1; i<=n; i++){
		prefixDp[i][0] = 1;
	}
	

	for(int x=1; x<=k; x++){
		
		vector<int> f(26, 0);

		for(int i=1, j=1; i<=n; i++){
			f[str[i-1]-'a']++;
			
			while(j<=i){
				bool isValid = true;
				for(int p=0; p<26; p++){
					if(f[p] == 0) continue;
					if(f[p] > a[p]){
						isValid = false;
						break;
					}
				}
				if(isValid) break;
				
				f[str[j-1]-'a']--;
				j++;
			}
			
			if(j-2>=0){
				dp[i][x] = prefixDp[i-1][x-1] - prefixDp[j-2][x-1];
			}
			else{
				dp[i][x] = prefixDp[i-1][x-1] - 0;
			}
			prefixDp[i][x] = prefixDp[i-1][x] + dp[i][x]; 
		}
	}
	
	return dp[n][k];

}








int practice(int n, int k){


    return 0;
}





void solve() {
    
    int n , k;
    cin>> n >> k;
    
    cin >> str;
    
    a.resize(26);
    for(int i=0; i<n; i++) cin >> a[i];
    
    cout << consistency1(n, k) << " " << consistency2(n, k) << endl;


}





int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}