#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } const long long MAX = 5100000; const long long INF = 1LL << 60; //const long long mod = 1000000007LL; //const long long mod = 998244353LL; using namespace std; typedef unsigned long long ull; typedef long long ll; int dp[2007][2007][26]; string vs[2007]; int main() { cin.tie(nullptr); ios::sync_with_stdio(false); ll H, W, K; cin >> H >> W >> K; for (ll i = 0; i < H; i++) { cin >> vs[i]; } for (ll i = 0; i <= H; i++)for (ll j = 0; j <= W; j++)for (ll k = 0; k < 26; k++) dp[i][j][k] = (1 << 30); for (ll k = 0; k < 26; k++) { for (ll i = H - 1; i >= 0; i--) { for (ll j = W - 1; j >= 0; j--) { int f = min(H - i, W - j); if (vs[i][j] - 'a' == k) dp[i][j][k] = 1; else dp[i][j][k] = min({ f,dp[i + 1][j][k],dp[i][j + 1][k],dp[i + 1][j + 1][k] }) + 1; } } } ll res = 0; for (ll i = 0; i < H; i++) { for (ll j = 0; j < W; j++) { sort(dp[i][j], dp[i][j] + 26); if (K == 26) res += min(H - i, W - j) + 1 - dp[i][j][K - 1]; else res += dp[i][j][K] - dp[i][j][K - 1]; } } cout << res << endl; return 0; }