#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
constexpr int N = 114514;
int n;
int m;
int k;
string str;
long long graph[30][30];
long long sum[N][30];
long long minn[30];
long long dp[N];
int main () {
freopen ("cowmbat.in", "r", stdin);
freopen ("cowmbat.out", "w", stdout);
cin >> n >> m >> k >> str;
str = ' ' + str;
memset (graph, 0x3f, sizeof (graph));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
cin >> graph[i][j];
}
}
for (int l = 1; l <= m; l++) {
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) {
graph[i][j] = min (graph[i][j], graph[i][l] + graph[l][j]);
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
sum[i][j] = graph[str[i] - 'a' + 1][j] + sum[i - 1][j];
}
}
memset (dp, 0x3f, sizeof (dp));
dp[0] = 0;
for (int i = k; i <= n; i++) {
for (int c = 1; c <= m; c++) {
// for (int j = 0; j <= i - k; j++) {
// dp[i] = min (dp[i], dp[j] + sum[i][c] - sum[j][c]);
// }
dp[i] = min (dp[i], minn[c] + sum[i][c]);
minn[c] = min (minn[c], dp[i - k + 1] - sum[i - k + 1][c]);
}
}
cout << dp[n] << endl;
return 0;
}