1
2
3
#include <bits/stdc++.h>
using namespace std;using l=long long;const l X=-(1LL<<62);
int main(){ios::sync_with_stdio(0);cin.tie(0);int n,m,k;cin>>n>>m>>k;vector<vector<l>>d,p;vector<l>t;d.reserve(n);p.reserve(n);t.reserve(n);for(int i=0;i<n;++i){vector<l>a(m);for(int j=0;j<m;++j)cin>>a[j];bool f=1; for(int j=0;j+1<m;++j)if(a[j]<a[j+1]){f=0;break;}if(f)d.push_back(move(a));else{vector<l>b(m+1);for(int j=0;j<m;++j)b[j+1]=b[j]+a[j];t.push_back(b[m]);p.push_back(move(b));}}int s=d.size(),u=s*m;vector<l>e(u+1);priority_queue<tuple<l,int,int>>q;for(int i=0;i<s;++i)q.emplace(d[i][0],i,0);for(int i=1;i<=u;++i){auto[w,j,z]=q.top();q.pop();e[i]=e[i-1]+w;if(z+1<m)q.emplace(d[j][z+1],j,z+1);}int v=p.size(),y=v*m;vector<l>g(y+1,X);g[0]=0;if(v){vector<int>o(v);iota(o.begin(),o.end(),0);sort(o.begin(),o.end(),[&](int a,int b){return t[a]>t[b];});vector<l>h(v+1);for(int i=1;i<=v;++i)h[i]=h[i-1]+t[o[i-1]];auto r=[&](int a,int b){return a*m+b;};vector<l>x((v+2)*m,X);for(int i=v;i>=1;--i){int j=o[i-1];for(int z=0;z<m;++z)x[r(i,z)]=max(x[r(i+1,z)],p[j][z]);}vector<l>c(m,X);for(int i=0;i<=v;++i){g[i*m]=h[i];if(i<v){for(int z=1;z<m;++z){l a=X;a=max(a,h[i]+x[r(i+1,z)]);if(i>0)a=max(a,h[i+1]+c[z]);g[i*m+z]=a;}int j=o[i];for(int z=1;z<m;++z)c[z]=max(c[z],p[j][z]-t[j]);}}}l a=0;for(int i=max(0,k-y);i<=min(k,u);++i)a=max(a,e[i]+g[k-i]);cout<<a<<'\n';}