#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k;
int a[1 << 22];
int cnt[22], last[22], t[22], c[22][22], T;
char s[200001];
int mask[550001], l[550001], r[550001];
int get(int i, int j, int id) {
  if (i > j) {
    return 0;
  }
  if (i < l[id]) {
    i = l[id];
  }
  if (j > r[id]) {
    j = r[id];
  }
  if (i == l[id] && j == r[id]) {
    return mask[id];
  }
  return get(i, j, 2 * id) | get(i, j, 2 * id + 1);
}
int main() {
  scanf("%d%d%d\n", &n, &m, &T);
  gets(s);
  int N = 1;
  while (N <= n) {
    N *= 2;
  }
  for (i = 2 * N - 1; i >= 1; i--) {
    if (i >= N + n - 1) {
      mask[i] = 0;
      l[i] = r[i] = i - N;
    } else if (i >= N) {
      mask[i] = (1 << (s[i - N] - 'A'));
      l[i] = r[i] = i - N;
    } else {
      l[i] = l[2 * i];
      r[i] = r[2 * i + 1];
      mask[i] = mask[2 * i] | mask[2 * i + 1];
    }
  }
  for (i = 0; i < m; i++) {
    scanf("%d", &t[i]);
  }
  for (i = 0; i < m; i++)
    for (j = 0; j < m; j++) {
      scanf("%d", &c[i][j]);
    }
  for (i = 0; i < m; i++) {
    last[i] = -1;
  }
  for (i = 0; i < n; i++) {
    k = s[i] - 'A';
    cnt[k]++;
    for (j = 0; j < m; j++)
      if (last[j] != -1 && (last[k] == -1 || last[k] <= last[j])) {
        int x = get(last[j] + 1, i - 1, 1);
        a[x] += c[j][k];
        a[x | (1 << j)] -= c[j][k];
        a[x | (1 << k)] -= c[j][k];
        a[x | (1 << j) | (1 << k)] += c[j][k];
      }
    last[k] = i;
  }
  for (i = 0; i < m; i++)
    if (cnt[i] > 0) {
      a[1 << i] += t[i];
    }
  for (j = 0; j < m; j++)
    for (i = 0; i < (1 << m); i++)
      if ((1 << j) & i)
        ;
      else {
        a[(1 << j) | i] += a[i];
      }
  int ans = 0;
  for (i = 0; i < (1 << m); i++) {
    for (j = 0; j < m; j++)
      if (((1 << j) & i) && !cnt[j]) {
        break;
      }
    if (a[i] <= T && j == m) {
      ans++;
    }
  }
  if (a[(1 << m) - 1] <= T) {
    ans--;
  }
  cout << ans;
  return 0;
}
