#include <bits/stdc++.h>
using namespace std;
char ori[1020][1020];
int stx[300010], sty[300010], enx[300010], eny[300010];
long long ct[28][1010][1010];
long long d[1010][1010];
int id[300010];
int n, m, k;
void dist(int (&c)[1010][1010]) {
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) {
      if (i != 0) c[i][j] += c[i - 1][j];
      if (j != 0) c[i][j] += c[i][j - 1];
      if (i != 0 && j != 0) c[i][j] -= c[i - 1][j - 1];
    }
}
void dist(long long (&c)[1010][1010]) {
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= m; j++) {
      if (i != 0) c[i][j] += c[i - 1][j];
      if (j != 0) c[i][j] += c[i][j - 1];
      if (i != 0 && j != 0) c[i][j] -= c[i - 1][j - 1];
    }
}
int query(int (&c)[1010][1010], int sx, int sy, int ex, int ey) {
  int ret = c[ex][ey];
  if (sx != 0) ret -= c[sx - 1][ey];
  if (sy != 0) ret -= c[ex][sy - 1];
  if (sx != 0 && sy != 0) ret += c[sx - 1][sy - 1];
  return ret;
}
long long query(long long (&c)[1010][1010], int sx, int sy, int ex, int ey) {
  long long ret = c[ex][ey];
  if (sx != 0) ret -= c[sx - 1][ey];
  if (sy != 0) ret -= c[ex][sy - 1];
  if (sx != 0 && sy != 0) ret += c[sx - 1][sy - 1];
  return ret;
}
int main(void) {
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &k);
  for (int i = 0; i < n; i++) {
    scanf("%s", ori[i]);
  }
  memset(ct, 0, sizeof(ct));
  for (int i = 0; i < k; i++) {
    char st[2];
    scanf("%d", &stx[i]);
    scanf("%d", &sty[i]);
    scanf("%d", &enx[i]);
    scanf("%d", &eny[i]);
    stx[i]--, sty[i]--, enx[i]--, eny[i]--;
    scanf("%s", st);
    id[i] = st[0] - 'a';
    ct[id[i]][stx[i]][sty[i]]++;
    ct[id[i]][stx[i]][eny[i] + 1]--;
    ct[id[i]][enx[i] + 1][sty[i]]--;
    ct[id[i]][enx[i] + 1][eny[i] + 1]++;
  }
  for (int i = 0; i < 26; i++) dist(ct[i]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      int tot = k;
      for (int l = 0; l < 26; l++) {
        tot -= ct[l][i][j];
      }
      ct[ori[i][j] - 'a'][i][j] += tot;
    }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      long long tot = 0;
      for (int l = 0; l < 26; l++) {
        tot += ct[l][i][j] * abs(ori[i][j] - 'a' - l);
      }
      d[i][j] = tot;
    }
  dist(d);
  for (int z = 0; z < 26; z++) dist(ct[z]);
  long long ans = 1000000000000000000LL;
  long long totdiff = query(d, 0, 0, n - 1, m - 1);
  for (int i = 0; i < k; i++) {
    long long sendiri = totdiff - query(d, stx[i], sty[i], enx[i], eny[i]);
    for (int j = 0; j < 26; j++) {
      sendiri += query(ct[j], stx[i], sty[i], enx[i], eny[i]) * abs(j - id[i]);
    }
    ans = min(ans, sendiri);
  }
  cout << ans;
  return 0;
}
