#include <bits/stdc++.h>
using namespace std;
const int inf = 987654321;
const long long int INF = 123456789987654321;
FILE *fin, *fout;
int N, M, K;
vector<int> aa, bb, cc, dd, ee;
vector<vector<char> > G;
vector<vector<vector<long long int> > > C;
vector<vector<long long int> > P;
vector<vector<long long int> > U;
vector<vector<vector<long long int> > > Q;
int main() {
  scanf("%d %d %d", &N, &M, &K);
  G = vector<vector<char> >(N, vector<char>(M));
  for (int i = 0; i < N; i++) {
    scanf("\n");
    for (int j = 0; j < M; j++) {
      scanf("%c", &G[i][j]);
    }
  }
  C = vector<vector<vector<long long int> > >(
      26, vector<vector<long long int> >(N, vector<long long int>(M, 0)));
  U = vector<vector<long long int> >(N, vector<long long int>(M, 0));
  aa.resize(K);
  bb.resize(K);
  cc.resize(K);
  dd.resize(K);
  ee.resize(K);
  for (int i = 0; i < K; i++) {
    int a, b, c, d;
    char e;
    scanf("\n%d %d %d %d %c", &a, &b, &c, &d, &e);
    aa[i] = --a;
    bb[i] = --b;
    cc[i] = --c;
    dd[i] = --d;
    ee[i] = e - 'a';
    C[e - 'a'][a][b]++;
    if (c != N - 1) C[e - 'a'][c + 1][b]--;
    if (d != M - 1) C[e - 'a'][a][d + 1]--;
    if (c != N - 1 && d != M - 1) C[e - 'a'][c + 1][d + 1]++;
    U[a][b]++;
    if (c != N - 1) U[c + 1][b]--;
    if (d != M - 1) U[a][d + 1]--;
    if (c != N - 1 && d != M - 1) U[c + 1][d + 1]++;
  }
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < N; j++) {
      for (int k = 0; k < M; k++) {
        if (j != 0) C[i][j][k] += C[i][j - 1][k];
        if (k != 0) C[i][j][k] += C[i][j][k - 1];
        if (j != 0 && k != 0) C[i][j][k] -= C[i][j - 1][k - 1];
      }
    }
  }
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      if (i != 0) U[i][j] += U[i - 1][j];
      if (j != 0) U[i][j] += U[i][j - 1];
      if (i != 0 && j != 0) U[i][j] -= U[i - 1][j - 1];
    }
  }
  P = vector<vector<long long int> >(N, vector<long long int>(M, 0));
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      int a = G[i][j] - 'a';
      for (int k = 0; k < 26; k++) {
        P[i][j] += abs(a - k) * C[k][i][j];
      }
      if (i != 0) P[i][j] += P[i - 1][j];
      if (j != 0) P[i][j] += P[i][j - 1];
      if (i != 0 && j != 0) P[i][j] -= P[i - 1][j - 1];
    }
  }
  Q = vector<vector<vector<long long int> > >(
      26, vector<vector<long long int> >(N, vector<long long int>(M, 0)));
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < N; j++) {
      for (int k = 0; k < M; k++) {
        Q[i][j][k] = G[j][k] - 'a' == i ? K - U[j][k] : 0;
        Q[i][j][k] += C[i][j][k];
        if (j != 0) Q[i][j][k] += Q[i][j - 1][k];
        if (k != 0) Q[i][j][k] += Q[i][j][k - 1];
        if (j != 0 && k != 0) Q[i][j][k] -= Q[i][j - 1][k - 1];
      }
    }
  }
  long long int ans = INF;
  for (int i = 0; i < K; i++) {
    long long int tmp = P[cc[i]][dd[i]];
    if (aa[i] != 0) tmp -= P[aa[i] - 1][dd[i]];
    if (bb[i] != 0) tmp -= P[cc[i]][bb[i] - 1];
    if (aa[i] != 0 && bb[i] != 0) tmp += P[aa[i] - 1][bb[i] - 1];
    tmp = P[N - 1][M - 1] - tmp;
    for (int j = 0; j < 26; j++) {
      tmp += Q[j][cc[i]][dd[i]] * abs(ee[i] - j);
      if (aa[i] != 0) tmp -= Q[j][aa[i] - 1][dd[i]] * abs(ee[i] - j);
      if (bb[i] != 0) tmp -= Q[j][cc[i]][bb[i] - 1] * abs(ee[i] - j);
      if (aa[i] != 0 && bb[i] != 0)
        tmp += Q[j][aa[i] - 1][bb[i] - 1] * abs(ee[i] - j);
    }
    ans = min(ans, tmp);
  }
  printf("%I64d", ans);
}
