#include <bits/stdc++.h>
using namespace std;
int n, k, T, t[25], m[25][25], pre[25], f[1 << 22];
char s[200010];
int main() {
  scanf("%d%d%d", &n, &k, &T);
  scanf("%s", s + 1);
  for (int i = 0; i < k; i++) scanf("%d", &t[i]);
  for (int i = 0; i < k; i++) {
    for (int j = 0; j < k; j++) {
      scanf("%d", &m[i][j]);
    }
  }
  memset(pre, 255, sizeof(pre));
  int S = 0;
  for (int i = 0; i < k; i++) f[1 << i] = t[i];
  for (int i = 1; i <= n; i++) {
    int cur = s[i] - 'A';
    S |= (1 << cur);
    for (int j = 0; j < k; j++) {
      if (pre[j] != -1) {
        if (!((pre[j] >> j) & 1) && !((pre[j] >> cur) & 1)) {
          f[pre[j]] += m[j][cur];
          f[pre[j] | (1 << j)] -= m[j][cur];
          f[pre[j] | (1 << cur)] -= m[j][cur];
          f[pre[j] | (1 << j) | (1 << cur)] += m[j][cur];
        }
      }
      pre[j] |= (1 << cur);
    }
    pre[cur] = 0;
  }
  for (int i = 0; i < k; i++) {
    for (int j = 0; j < (1 << k); j++) {
      if ((j >> i) & 1) f[j] += f[j ^ (1 << i)];
    }
  }
  int ans = 0;
  for (int i = 0; i < (1 << k); i++) {
    if ((i & S) == i && f[i] <= T && i != S) ans++;
  }
  printf("%d\n", ans);
  return 0;
}
