```go
package main
import (
"io"
"os"
"strconv"
)
type FastScanner struct {
data []byte
idx int
}
func (fs *FastScanner) NextInt() int {
n := len(fs.data)
i := fs.idx
for i < n && fs.data[i] <= ' ' {
i++
}
sign := 1
if fs.data[i] == '-' {
sign = -1
i++
}
val := 0
for i < n && fs.data[i] > ' ' {
val = val*10 + int(fs.data[i]-'0')
i++
}
fs.idx = i
return val * sign
}
func (fs *FastScanner) NextToken() []byte {
n := len(fs.data)
i := fs.idx
for i < n && fs.data[i] <= ' ' {
i++
}
start := i
for i < n && fs.data[i] > ' ' {
i++
}
fs.idx = i
return fs.data[start:i]
}
func zeroEdges2(a, b []int64, n, m int, rowOff []int) {
for j := 0; j <= m; j++ {
a[j] = 0
b[j] = 0
}
for i := 1; i <= n; i++ {
idx := rowOff[i]
a[idx] = 0
b[idx] = 0
}
}
func main() {
data, _ := io.ReadAll(os.Stdin)
fs := FastScanner{data: data}
n := fs.NextInt()
m := fs.NextInt()
k := fs.NextInt()
H := n + 2
W := m + 2
size := H * W
rowOff := make([]int, H)
for i := 0; i < H; i++ {
rowOff[i] = i * W
}
tgrid := make([]byte, size)
for i := 1; i <= n; i++ {
s := fs.NextToken()
base := rowOff[i]
for j := 0; j < m; j++ {
tgrid[base+1+j] = s[j] - 'a'
}
}
totalCnt := make([]int32, size)
byColor := make([]int32, 26*size)
x1 := make([]int, k)
y1 := make([]int, k)
x2 := make([]int, k)
y2 := make([]int, k)
paint := make([]byte, k)
var groups [26][]int
for i := 0; i < k; i++ {
a := fs.NextInt()
b := fs.NextInt()
c := fs.NextInt()
d := fs.NextInt()
e := fs.NextToken()[0] - 'a'
x1[i], y1[i], x2[i], y2[i] = a, b, c, d
paint[i] = e
groups[e] = append(groups[e], i)
idx1 := rowOff[a] + b
idx2 := rowOff[c+1] + b
idx3 := rowOff[a] + d + 1
idx4 := rowOff[c+1] + d + 1
totalCnt[idx1]++
totalCnt[idx2]--
totalCnt[idx3]--
totalCnt[idx4]++
base := int(e) * size
byColor[base+idx1]++
byColor[base+idx2]--
byColor[base+idx3]--
byColor[base+idx4]++
}
active := make([]int, 0, 26)
for c := 0; c < 26; c++ {
if len(groups[c]) > 0 {
active = append(active, c)
}
}
for i := 1; i <= n; i++ {
cur := totalCnt[rowOff[i] : rowOff[i]+W]
up := totalCnt[rowOff[i-1] : rowOff[i-1]+W]
for j := 1; j <= m; j++ {
cur[j] += cur[j-1] + up[j] - up[j-1]
}
}
for _, c := range active {
d := byColor[c*size : (c+1)*size]
for i := 1; i <= n; i++ {
cur := d[rowOff[i] : rowOff[i]+W]
up := d[rowOff[i-1] : rowOff[i-1]+W]
for j := 1; j <= m; j++ {
cur[j] += cur[j-1] + up[j] - up[j-1]
}
}
}
var dist [26][26]int64
for i := 0; i < 26; i++ {
for j := 0; j < 26; j++ {
if i > j {
dist[i][j] = int64(i - j)
} else {
dist[i][j] = int64(j - i)
}
}
}
sArr := make([]int64, k)
adj := make([]int64, k)
p1 := make([]int64, size)
p2 := make([]int64, size)
var totalS int64
for _, a := range active {
zeroEdges2(p1, p2, n, m, rowOff)
wrow := dist[a]
for i := 1; i <= n; i++ {
row := rowOff[i]
prev := rowOff[i-1]
cur1 := p1[row : row+W]
cur2 := p2[row : row+W]
up1 := p1[prev : prev+W]
up2 := p2[prev : prev+W]
tg := tgrid[row : row+W]
cov := totalCnt[row : row+W]
for j := 1; j <= m; j++ {
b := wrow[tg[j]]
cur1[j] = b + cur1[j-1] + up1[j] - up1[j-1]
cur2[j] = int64(cov[j])*b + cur2[j-1] + up2[j] - up2[j-1]
}
}
for _, id := range groups[a] {
r0 := rowOff[x1[id]-1]
r1 := rowOff[x2[id]]
l := y1[id] - 1
rr := y2[id]
q1 := p1[r1+rr] - p1[r0+rr] - p1[r1+l] + p1[r0+l]
q2 := p2[r1+rr] - p2[r0+rr] - p2[r1+l] + p2[r0+l]
sArr[id] = q1
totalS += q1
adj[id] -= q2
}
}
for _, c := range active {
zeroEdges2(p1, p2, n, m, rowOff)
wrow := dist[c]
d := byColor[c*size : (c+1)*size]
for i := 1; i <= n; i++ {
row := rowOff[i]
prev := rowOff[i-1]
cur1 := p1[row : row+W]
cur2 := p2[row : row+W]
up1 := p1[prev : prev+W]
up2 := p2[prev : prev+W]
tg := tgrid[row : row+W]
dc := d[row : row+W]
for j := 1; j <= m; j++ {
cnt := int64(dc[j])
cur1[j] = cnt + cur1[j-1] + up1[j] - up1[j-1]
cur2[j] = cnt*wrow[tg[j]] + cur2[j-1] + up2[j] - up2[j-1]
}
}
for id := 0; id < k; id++ {
r0 := rowOff[x1[id]-1]
r1 := rowOff[x2[id]]
l := y1[id] - 1
rr := y2[id]
q1 := p1[r1+rr] - p1[r0+rr] - p1[r1+l] + p1[r0+l]
q2 := p2[r1+rr] - p2[r0+rr] - p2[r1+l] + p2[r0+l]
adj[id] += wrow[paint[id]]*q1 - q2
}
}
ans := int64(1 << 62)
kk := int64(k)
for i := 0; i < k; i++ {
v := kk*sArr[i] + totalS + adj[i]
if v < ans {
ans = v
}
}
os.Stdout.WriteString(strconv.FormatInt(ans, 10))
}
```