#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, m, k;
    cin >> n >> m >> k;

    char a[1005][1005];  // 原矩阵
    vector<int> segments;  // 每段连续o的数量

    // 输入矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> a[i][j];
        }
    }

    // 对每一列找连续的o
    for (int col = 0; col < m; col++) {
        int cnt = 0;
        for (int row = 0; row < n; row++) {
            if (a[row][col] == 'o') {
                cnt++;
            } else {
                if (cnt >= 2) segments.push_back(cnt);
                cnt = 0;
            }
        }
        if (cnt >= 2) segments.push_back(cnt);  // 列底部也要判断
    }

    // 得分段:每段长度cnt → 能得 cnt-1 分,但要涂 cnt 个格子
    sort(segments.begin(), segments.end(), greater<int>());  // 优先长段

    int score = 0, used = 0;

    for (int i = 0; i < segments.size(); i++) {
        int len = segments[i];
        if (used + len <= k) {
            used += len;
            score += (len - 1);
        } else {
            int rem = k - used;
            if (rem >= 2) score += (rem - 1);  // 只用剩下的红格也能得分
            break;
        }
    }

    cout << score << endl;
    return 0;
}

有点难