#define _CRF_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE
  
#include <stdio.h>
  
const int MaxN = 210;
const int MaxM = 210;
const int MaxK = 55;
  
int n, m, k;
char map[MaxN][MaxM];
char map2[MaxN][MaxN];
  
short column[MaxM][MaxN][MaxK];
short row[MaxN][MaxM][MaxK];
  
short left[MaxN][MaxK];
short right[MaxN][MaxK];
  
short max(short a, short b) { return a > b ? a : b; }
short min(short a, short b) { return a < b ? a : b; }
  
void CalculateRow(int m, char *map, int _k, short row[MaxN][MaxK])
{
    // left
    left[0][0] = map[0] == '.';
    for (int i = 1; i < m; ++i) {
        if (map[i] == '*') left[i][0] = 0;
        else left[i][0] = left[i - 1][0] + 1;
    }
  
    for (int k = 1; k <= _k; ++k) {
        left[0][k] = 1;
        for (int i = 1; i < m; ++i) {
            if (map[i] == '*') left[i][k] = left[i - 1][k - 1] + 1;
            else left[i][k] = left[i - 1][k] + 1;
        }
    }
  
    // right
    right[m - 1][0] = map[m - 1] == '.';
    for (int i = m - 2; i >= 0; --i) {
        if (map[i] == '*') right[i][0] = 0;
        else right[i][0] = right[i + 1][0] + 1;
    }
  
    for (int k = 1; k <= _k; ++k) {
        right[m - 1][k] = 1;
        for (int i = m - 2; i >= 0; --i) {
            if (map[i] == '*') right[i][k] = right[i + 1][k - 1] + 1;
            else right[i][k] = right[i + 1][k] + 1;
        }
    }
  
    // merge
    for (int i = 0; i < m; ++i) {
        if (map[i] == '*') row[i][0] = 0;
        else row[i][0] = left[i][0] + right[i][0] - 1;
    }
  
    for (int k = 1; k <= _k; ++k) {
        row[0][k] = right[0][k];
        row[m - 1][k] = left[m - 1][k];
  
        for (int i = 1; i < m - 1; ++i) {
            int newK = k;
            if (map[i] == '*') newK = k - 1;
  
            for (int leftK = 0; leftK <= newK; ++leftK) {
                int rightK = newK - leftK;
                row[i][k] = max( row[i][k], left[i - 1][leftK] + right[i + 1][rightK] + 1 );
            }
        }
  
    }
}
  
int main()
{
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 0; i < n; ++i) {
        scanf("%s", map[i]);
    }
  
    // rotate matrix (columns to rows)
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j)
            map2[j][i] = map[i][j];
    }
  
    for (int i = 0; i < n; ++i)
        CalculateRow(m, map[i], k, row[i]);
    for (int i = 0; i < m; ++i)
        CalculateRow(n, map2[i], k, column[i]);
  
    short oldret = -1;
    short retR = -1;
    short retC = -1;
    short rowObstacles = -1;
    short columnObstacles = -1;
  
    short ret = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            for (int rowK = 0; rowK <= k; ++rowK) {
                int columnK = k - rowK;
  
                if (map[i][j] == '*') {
                    if (rowK != 0)
                        ret = max(ret, row[i][j][rowK] + column[j][i][columnK + 1] - 1);
                    if (columnK != 0)
                        ret = max(ret, row[i][j][rowK + 1] + column[j][i][columnK] - 1);
                }
                else {
                    ret = max(ret, row[i][j][rowK] + column[j][i][columnK] - 1);
                }
  
                if (oldret < ret) {
                    oldret = ret;
                    retR = i;
                    retC = j;
                    rowObstacles = rowK;
                    columnObstacles = columnK;
                }
            }
        }
    }
  
    printf("%d\n", ret);
  
    /*
    printf("Row = %d\n", retR);
    printf("Column = %d\n", retC);
    printf("Mapa[%d][%d] = %c\n", retR, retC, map[retR][retC]);
    printf("Row obstacles = %d\n", rowObstacles);
    printf("Column obstacles = %d\n", columnObstacles);
    */
  
    return 0;
}