// square869120Contest #3-B
#include <bits/stdc++.h>
#define endl "\n"
#define rep(i,n) for(int i=0;i<int(n);i++)
#define e_b emplace_back
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> ipair;
typedef pair<ll,ll> lpair;
template <class T>ostream &operator<<(ostream &o,const vector<T>&v) //vectorの中身を見る
{o<<"{";for(int i=0;i<(int)v.size();i++)o<<(i>0?", ":"")<<v[i];o<<"}";return o;}
void map_p(map<int,int>& d){cout<<"map: ";for(auto a : d){cout<<"{"<<a.first<<":"<<a.second<<"}";}cout<<endl;} //mapの中身を見る
void set_p(set<int>& d){cout<<"set: ";for(int a : d){cout<<a<<" ";}cout<<endl;} //setの中身を見る

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(12);

    int h,w,k;
    cin>>h>>w>>k;
    vector<vector<int>> ban(h,vector<int>(w));
    rep(i,h){
        rep(j,w){
            char a;
            cin>>a;
            ban[i][j]=a-'0';
        }
    }
    int ans=0;
    rep(i,h){
        rep(j,w){
            int score=0;
            vector<vector<int>> cur=ban;
            cur[i][j]=0; //最初に消すセル
            int now=i-1;
            //下に詰める
            while(now>=0){
                cur[now+1][j]=cur[now][j],cur[now][j]=0;
                now--;
            }
            int turn=0;
            //消えるものがあるまで続く
            while(true){
                int max_del=-1,total=0; //消せたもののなかで1番でかい数字 このターンで消した合計
                //盤を見ていく
                rep(k1,h){
                    int now_n=cur[k1][0],ren=1;
                    for(int k2=1;k2<w;k2++){
                        if(now_n==cur[k1][k2]) ren++;
                        else{
                            if(ren>=k){
                                // cout<<turn<<":"<<now_n<<endl;
                                total+=ren*now_n;
                                max_del=max(max_del,now_n);
                                for(int k3=k2-1;k3>=(k2-1)-(ren-1);k3=k3-1) cur[k1][k3]=0; //消した場所を0にする
                            }
                            now_n=cur[k1][k2],ren=1;
                        }
                    }
                    if(ren>=k){
                        // cout<<turn<<":"<<now_n<<endl;
                        total+=ren*now_n;
                        max_del=max(max_del,now_n);
                        for(int k3=w-1;k3>=(w-1)-(ren-1);k3=k3-1) cur[k1][k3]=0; //消した場所を0にする
                    }
                }
                //盤見終わる
                score+=(1<<turn)*total;
                turn++;
                if(max_del<=0) break; //何も消せてない
                // 各列を下に詰める
                rep(k2,w){
                    for(int k1=h-1;k1>=0;k1=k1-1){
                        if(cur[k1][k2]>=1) continue;
                        int now_i=k1-1;
                        while(now_i>=0){
                            if(cur[now_i][k2]>=1){
                                cur[k1][k2]=cur[now_i][k2],cur[now_i][k2]=0;
                                break;
                            }
                            now_i--;
                        }
                    }
                }
            }
            ans=max(ans,score);
        }
    }
    cout<<ans<<endl;
    return 0;
}

Measured memory_bytes: 3636