using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Security.Cryptography; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); static string[] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine()).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (h, w, k) = (c[0], c[1], c[2]); var s = SList(h); WriteLine(Sq(h, w, k, s)); } static long Sq(int h, int w, int k, string[] s) { var poslist = new int[26, h, w]; for (var m = 0; m < 26; ++m) for (var i = 0; i < h; ++i) for (var j = 0; j < w; ++j) poslist[m, i, j] = int.MaxValue; for (var i = 0; i < 26; ++i) { Calc(h, w, s, (char)(i + 'a'), poslist); } var ans = 0L; var arr = new int[26]; for (var i = 0; i < h; ++i) for (var j = 0; j < w; ++j) { for (var m = 0; m < 26; ++m) arr[m] = poslist[m, i, j]; Array.Sort(arr); if (arr[k - 1] == int.MaxValue) continue; var next = Math.Min(k < 26 ? arr[k] : int.MaxValue, Math.Min(h - i, w - j)); ans += Math.Max(0, next - arr[k - 1]); } return ans; } static void Calc(int h, int w, string[] s, char c, int[,,] poslist) { var m = c - 'a'; var xlist = new List[w]; var xidx = new int[w]; for (var i = 0; i < w; ++i) xlist[i] = new List(); for (var i = 0; i < h; ++i) for (var j = 0; j < w; ++j) if (s[i][j] == c) xlist[j].Add(i); for (var i = 0; i < h; ++i) { var pos = 0; for (var j = 0; j < w; ++j) { while (pos < j || (pos < w && (xidx[pos] == xlist[pos].Count || xlist[pos][xidx[pos]] - i > pos - j))) ++pos; poslist[m, i, j] = Math.Min(poslist[m, i, j], pos == w ? int.MaxValue : pos - j); if (xidx[j] < xlist[j].Count && xlist[j][xidx[j]] == i) ++xidx[j]; } } var ylist = new List[h]; var yidx = new int[h]; for (var i = 0; i < h; ++i) ylist[i] = new List(); for (var i = 0; i < h; ++i) for (var j = 0; j < w; ++j) if (s[i][j] == c) ylist[i].Add(j); for (var j = 0; j < w; ++j) { var pos = 0; for (var i = 0; i < h; ++i) { while (pos < i || (pos < h && (yidx[pos] == ylist[pos].Count || ylist[pos][yidx[pos]] - j > pos - i))) ++pos; poslist[m, i, j] = Math.Min(poslist[m, i, j], pos == h ? int.MaxValue : pos - i); if (yidx[i] < ylist[i].Count && ylist[i][yidx[i]] == j) ++yidx[i]; } } } }