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

int main() {
    int n, m, k;
    cin >> n >> m >> k;            // n行, m列, 可操作次数k
    vector<vector<char>> a(n + 1, vector<char>(m + 1, '0'));
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            cin >> a[i][j];
        }
    }

    vector<pair<int, int>> ans;    // 记录每列中连续'o'段的信息:<连续长度, 是否至少有一个'o'>
    for (int j = 1; j <= m; ++j) {
        int tem = 0;               // 当前连续'o'的个数
        int f = 0;                 // 该段是否含有'o'
        for (int i = 1; i <= n; ++i) {
            if (a[i][j] == 'o') f = 1;
            if (a[i][j] == 'o' && a[i-1][j] == 'o') {
                tem++;             // 遇到连续两个'o'时计数增加
            }
            // 当遇到不是'o' 或 到达最后一行时,结束当前段
            if (a[i][j] != 'o' || i == n) {
                ans.emplace_back(tem, f);
                f = 0;
                tem = 0;
            }
        }
    }

    // 按连续长度降序排序
    sort(ans.begin(), ans.end(), greater<>());

    int res = 0;
    for (auto [t, f] : ans) {
        if (t != 0) {
            int take = min(k, t + f);   // 可以操作的最大次数(与k和段长相关)
            res += take - 1;            // 每次操作增加的结果
            k -= take;                  // 剩余操作次数
        }
        if (k <= 0) break;
    }
    cout << res << endl;
    return 0;
}