#include #include #include #include #include #include #include using namespace std; typedef long long ll; const int maxn = 222; const int maxk = 55; char mat[maxn][maxn]; int L[maxn][maxn][maxk]; int R[maxn][maxn][maxk]; int up[maxn][maxn][maxk]; int down[maxn][maxn][maxk]; int rows[maxn][maxn][maxk]; int cols[maxn][maxn][maxk]; int main() { ios_base::sync_with_stdio(false); int n, m, k; cin >> n >> m >> k; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> mat[i][j]; } } for(int x = 0; x <= k; x++) { for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { up[i][j][x] = 0; } else { up[i][j][x] = 1; if(i > 0) { up[i][j][x] += up[i - 1][j][tmp_x]; } } } } } for(int x = 0; x <= k; x++) { for(int i = n - 1; i >= 0; i--) { for(int j = m - 1; j >= 0; j--) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { down[i][j][x] = 0; } else { down[i][j][x] = 1; if(i + 1 < n) { down[i][j][x] += down[i + 1][j][tmp_x]; } } } } } for(int x = 0; x <= k; x++) { for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { L[i][j][x] = 0; } else { L[i][j][x] = 1; if(j > 0) { L[i][j][x] += L[i][j - 1][tmp_x]; } } } } } for(int x = 0; x <= k; x++) { for(int i = n - 1; i >= 0; i--) { for(int j = m - 1; j >= 0; j--) { int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x < 0) { R[i][j][x] = 0; } else { R[i][j][x] = 1; if(j + 1 < m) { R[i][j][x] += R[i][j + 1][tmp_x]; } } } } } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { for(int x = 0; x <= k; x++) { rows[i][j][x] = 0; int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x >= 0) { for(int y = 0; y <= tmp_x; y++) { int tmp_y = tmp_x - y; int sum = 1; if(i + 1 < n) { sum += down[i + 1][j][tmp_y]; } if(i > 0) { sum += up[i - 1][j][y]; } rows[i][j][x] = max(rows[i][j][x], sum); } } } } } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { for(int x = 0; x <= k; x++) { cols[i][j][x] = 0; int tmp_x = x; if(mat[i][j] == '*') { tmp_x--; } if(tmp_x >= 0) { for(int y = 0; y <= tmp_x; y++) { int tmp_y = tmp_x - y; int sum = 1; if(j + 1 < m) { sum += R[i][j + 1][y]; } if(j > 0) { sum += R[i][j - 1][tmp_y]; } cols[i][j][x] = max(cols[i][j][x], sum); } } } } } int result= 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp_x = k; int obstacle = 0; if(mat[i][j] == '*') { tmp_x--; obstacle = 1; } if(tmp_x >= 0) { for(int x = 0; x <= tmp_x; x++) { int y = tmp_x - x; int r_tmp = x + obstacle; int c_tmp = y + obstacle; result = max(result, rows[i][j][r_tmp] + cols[i][j][c_tmp] - 1); } } } } cout << result - 1 << endl; return 0; }