#include <iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<functional>
int main() {
   int n,m,k;
   cin>>n>>m>>k;
   vector<vector<char>>v(n,vector<char>(m));
   vector<int>v_L;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            char c;
            cin>>c;
            v[i][j]=c;
        }
    } 
   //按照列来遍历 找出所有大于等于2的格子
   for(int j=0;j<m;j++){
       int L=0;
    for(int i=0;i<n;i++){
         if(v[i][j]=='o'){
             L++;
         }
         if(v[i][j]=='*'||i==n-1){
            if(L>=2){
             v_L.push_back(L);
             }
             L=0;
         }
    }
   }//贪心
   //因为开始需要先涂两个格子才能开始加1分 所以将最长的格子放在前面 确保往下涂一格的加1分最多
   sort(v_L.begin(),v_L.end(),greater<int>());  
    int score=0;
   for(int i=0;i<v_L.size();i++){
      if(k==0||k==1){//当前已经不支持涂两个格子得一分
        break;
      }
      if(k>=2){//支持涂两个格子得一分
       v_L[i]-=2;
       k-=2;
       score++;
       }
      while(v_L[i]!=0){//往下继续涂一格得一分
       if(k==0){
            break;
        }
        v_L[i]-=1;
        k-=1;
        score++;
      }
   }
   cout<<score;
      



}
// 64 位输出请用 printf("%lld")