/*
=-@%+-=+=+.#%-=**-==++============+===++==========-==#=.-.:@#++*+===----=---==--=-------
=:%+=%**++**%.-*+-++===============================+*#.-:.*@**#*+==------==-------------
===@+:-#-%+*+-=*+-==================++==============+@ -..@#++*+=++=-----==------==-----
==:-@#:#%=+=:==*+-========+======--::.:--=---::::.: :#.:..@****+==+=------=------------=
=##:.***-.:-#:=*+-========---::.:+*#%@###%%%%@%%%%@@@# +@****+====--------------------
-**#*#+*%*+%%.=*+-==-====-: :+#@@#+**#%%%***++=+++=+#@@@:+#***+++=-------=--------------
-=@=++*+-*#+@:=*+-=====-.:+@@%#++#*+*-....:-==++++##@@@@@@---++++=-------=--=-----------
*:@#=*=+*%+*=-=*+====---*@@%#+=*+--=*#@@@@@@@@@@@@@@@@@@@@@@*-::===--------=--=---------
-:.%#*-%@-*=.=+++=+=--#%*=-=*#%@@@@@@#*++=----==--++*#%%%#%%@@@= -------=---------------
:@=. *#+..:-%-=++--:=#+-+@@@@@%*+----=+++=++++++++++*+#*+#@%@@@@*.------=-=------=------
.@#*+%-*%=#%@:+*-..#%-+%@@%*===+++++++***++++*++++++++=*###@##%%#-.--=--=-=------==----=
:#+=*-*++#*%:-++::@@#*@@@#+++***++++++*+++=+++++++++++++*###*-%*@# :----=-=-------------
-:@+--*=#**%:=*+.*@%**@@#++*+*+++++++++++++++++++++++*+++*+#**%+%*..--=----------------=
=-:%*:+%#*%-:=*=-@@*=#@#**+*+++==+++++=+++===+==+=+++++++***%%**%@* :---=--------------=
:#.:++#=:::*+=#=:@@+#@##+++++*+++==+++=========+++++++++****+#%#*%%..------------------=
:@+=#=*+%=@@+=%-:@@##%*##*++++***+=====+==++++++++++++++****+##**%@# :-----=------------
.@=+=+*-+%%@.=%--@%@%###****+=====+==+++++++++=+===+++**#**++*###*@@. ..--=---------=--=
:*#=+-*+%=#%-=#--@%+*%*#****++++++++=+==++===+=++++++++**+*###*+%%#=.+- :----------=--=
-:*%+.#@-@*--+#==@#%###*+**#**+++=++==+=++++++=*+=----==**+++*##**%@@@@@+.-==----------=
+-.-**#.--.*-== :@#***##***+=--===+===========-+:.:-==-:=++++#%##%@@%+*@+.-----=-==-----
@@=*%:+%==@@.=@@%%*###%***--..:....:.::=++=--. *@@@@@@@#+**##+*#*--*#@+.-------==----=
*#-*-*+:*#@#.+@@@@#**%@***@@@@@@@@#+=+++++**+*@@@@%-.-*%@@****#*=%@#+##@-.--------=----=
:@=-++=*#-@:--***=%%*#@#*%@@*- +@@@@@*=+#@@@@:: -:=###**##+#%#*#@+ :-------==----=
=-@*.*##:@==+++*#+=#+=%*=*#=-=%@@@@@@@@#=++##@@@@@@@@@@@%#==+**%#=:#*+@=.--------==-----
=. #*##:+::=-++=@#%@@**##*@@@@=@@. :. %@-:-+# ::. -:-::#=+***%#=**+@@-.-----===------=
+=@# +.%#=+=-*+:@*=+*@@*+++..:. .:+%%#*%-:-%#=@@%*+-=+#**+=+=*##****%@+.:-----======---=
=::*-@%%--===%*.#@===*@*+++**@@@@@@===+@===%*-=:-@@@@@%+==+*+##*#%==+@+ --------===-----
:.=@@+.-=++=+##:=%%%#*%#*#*=----:::=++#%+::%#+**-. ..::-+****#***#*=+%-.-=--==--===---==
*%@@.-=++==+#*+=+*#+=+@#**##*====+=+***#+==*%*==--==-===++++****#*+%@*.-----========----
@@-:-+++-=+##+-==+*+-+@#*++=====-=:=#%%*=+++*%#%*-:-===-=+*#**##@@@@. :-=-------===--:-:
=:=++++=+#*+=-===#%=+%#***+==-::+**==*=.:::=#=*%@%#====+*******@- .---=------====---. :
=++*++--**@-+*##*****@@%##*+=+=%@@@@%++-.. .-+.+@=#@%+********##@# -------=======-=--. @%
+=--=+##@+--++**++*+:+@######%@@#==+#@@@@@@@@@@@#=-#@#*++*****##@# -==---====-======. @@*
=*++*@%---====+***+++=#@*%@*+#@#**++===+#@@%*+-++++=+###*+*#***%@* --------=-====--: @@@+
@@#*=-:==+++=+++**+++=@@**#*+##+====---:-+*+==-=+++=-=*#*+*#**#@- -==--=--====++=. %@%%+
-::-===+=++++++++****==%@##*=+##@@@@@@@#. --+%@@###*++*#**%%@# ---=----=+==. @@#%@+
+++++++++++++++++****+=#@@#%+-=##*+**#@@@@@@@@@@@@#@@#+==+#**%@*#@@ :---=--==-. @@=#%%+
=====+=====++++++*****+--####=++=-+%*=: .:+--:++=+%#+%@@- #@@@ -==--=+: @@*+##%+
========++++++++++****+:.@@%@@++*++*@@@@@@@@@@@@@+-=+*#%%%*%%@#:==@@@@@ .==--: @@@*=*%@+
+==++==+++*++++=+**+:. @@-@@%#*+*#*+#@%#%%%%%*++*****+**+#@@#:=:.#@@@@@= .-. @@%%#**%@
=====++*++++**= #@@@@# .@@@%+-====::------++==+===%@+@@@%-== -@@@%%@@@: @@@%%#+%@@
=+=++*+++=: .@@@@@@@@@#...@@@@#===++++==+==------#@#%@@@.:--. *@@@@@%@@@@@@###+#%#@*
=++=-:. +@@@@@@@@%%@@@@*.:..*@@@@*==--==+=-:+-==*@%%@@@=.-==- :@@@@@@@@@@@@@@@##:=*. .
- +=@@@@@@@@@@@%%@@@@@%===- .@@@@@%##*+**+*#@@@@@@@%..-=*=- #@@@@@@@@@@@@@@@@@@@*
..@@@@@@@@@@@@@@%%@@@@@@@@%*#*=- .@@@@@@@@@@@@@@@@@@- :==+++=. *@@%@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@%%%@@@@@@@@@*###*+--:. #@@+%@##@@@@= :.:++++++=: -@@@@@@@@@@@@@@@@@@@@@@@@@@
#@@@@@@@@@@@@@@@@@@@@@@@@%-+++##+==+. .:=+@-. ..:-+++=====-: :@@%%@@@%@@@@@@@@@@@@%@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@%:+==***+- @#@@@@@%@ +-+=======- .@@@@@@@@@@@@@@@@%%%%%@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@#.---++*=.+@@@@%.*@@@@@ --==----- @@@@@%@@@@@@@@@@@@@@@@@@%@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@%:--==++.@@#@=@@@@* @@@@@ .-==-=-. #@@@@@@@@@@@@@@@@@@@%%%@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@#:---===%@#.@@@=.@@@@@ .%@% :===: =@@@%@@@@@@@@@@@@%%%%%@@@@%@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@=----+@%: -@@%@@@@ ::-%@+-:: @@@%@@@@@@@@@@@@@@@@@@@@@@@@@@#
#@@@@@@@@@@@@@@@@@@@@@@@@@=.-=%*-:+* @@@*@@* :---=::-%= @@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@==+::--==+ =@@@#@ +:++==---: @@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@+:=====--: @: %@@@ +:=----=-. @@@%%%@%@@@@@@@@@@@@@@@@@%%%@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@*.++===== @@@@@@@ ====-==. =@@%@@@@@@@@@@@@@@@@@%@@@@@@@@@%@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@+ ===--=. @@@@%:@@@ :===-=- @@@%@@@@@@@@@@@@@@@%%@@@@@@@@@@@@%*
#@@@@@@@@@@@@@@@@@@@@@@@@@+ -====- @@% %@@@:@ .--=-- @@@%@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@* :-=++ @@@@@+%@+@+ ===- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@..---: @@@@@@ *@@@@ =-=. @@@@@%@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@+.:-- #@@@ @@@=.@@ -=- -@@%@@@@@@@@@@@@@@%@@@@%@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@*:+= @@-@@@@.@@@@@ - @@@@@@@@@@%@@@@@@%%@@@@%@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@= +- @@@*@@@@:@@@%=:.. @@@@@@@%@@@@@@@@@%%@@@%@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@: =. @@@@@ =@@@ +@@@ @@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@* . @@@=*@@@*@@#@@@# @@@@@@@@@@@%@@@%%@@@@@%@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@+%@@@.-@@@:%- @@@%@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@@= @@=@@@. @@@* @@@#@@@@@@@@@@@@@@%@@@@%%@@@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@@+@@@@+@@@@%@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%*
#@@@@@@@@@@@@@@%@@@@@@@@@@@@ .@@@%*@%@@ @@@@ @%@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@@-@@ *@@* *@@@ @@@%@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@@@@@@@%%%@@*
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=@@@@@@@@@@@%%@@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@@%%%%@@@@@@#
#@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@-#@@@.+@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@%@@@@@%@@@@@#
*###########***##*##########*@+ +%# *##- %************#*********************#**######%##*
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define sz(a) (int)a.size()
#define pb push_back
#define mp make_pair
#define st first
#define nd second
#define endl '\n'
#define fast ios_base::sync_with_stdio(NULL);cin.tie(0); cout.tie(0)
#define debug(x) cout << #x << " = " << x << endl;
#define vc vector
#define pii pair<int,int>
#define pll pair<ll,ll>
struct astck
{
ll s;
vc<ll> p;
};
void solve()
{
int n,m,k;
cin >> n>> m >> k;
vc<vc<ll>> dec;
vc<astck> inc;
for(int i=0; i<n; ++i)
{
vc<ll> a(m);
for(int j=0; j<m; ++j)
cin >>a[j];
if(a[0]>=a[m-1])
dec.pb(a);
else
{
vc<ll> p(m+1);
for(int j=0; j<m; ++j)
p[j+1]=p[j]+a[j];
inc.pb({p[m],p});
}
}
const ll inf=(1LL<<62);
vc<ll> d(k+1,-inf);
vc<ll> u(k+1,-inf);
d[0]=0;
u[0]=0;
priority_queue<tuple<ll,int,int>> q;
for(int i=0; i<sz(dec); ++i)
q.push({dec[i][0],i,0});
int lim=min(k,sz(dec)*m);
for(int i=1; i<=lim; ++i)
{
auto [v,id,pos]=q.top();
q.pop();
d[i]=d[i-1]+v;
if(pos+1<m)
q.push({dec[id][pos+1],id,pos+1});
}
sort(all(inc), [](const astck&a, const astck&b)
{
return a.s>b.s;
});
int s=sz(inc);
vc<ll> sum(s+1);
vc<ll> pref(s+1);
for(int i=1; i<=s; ++i)
{
sum[i]=inc[i-1].s;
pref[i]=pref[i-1]+sum[i];
if(1LL*i*m<=k)
u[i*m]=pref[i];
}
vc<ll> pre(s+1);
vc<ll> suf(s+2);
for(int i=1; i<m; ++i)
{
pre[0]=-inf;
for(int j=1; j<=s; ++j)
pre[i]=max(pre[j-1], inc[j-1].p[i]-sum[j]);
suf[s+1]=-inf;
for(int j=s; j>=1; --j)
suf[j]=max(suf[j+1],inc[j-1].p[i]);
for(int j=0; j<s and 1LL*i*m+i<=k; ++j)
{
ll best=suf[j+1];
if(pre[j]>-inf)
best=max(best,sum[j+1]+pre[j]);
u[i*m+i]=pref[j] +best;
}
}
ll ans=0;
for(int i=0; i<=k; ++i)
{
if(d[i]>-inf and u[k-i]>-inf)
ans=max(ans,d[i]+u[k-i]);
}
cout << ans;
}
int main()
{
fast;
int t=1;
//cin >> t;
while(t--)
solve();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 | /* =-@%+-=+=+.#%-=**-==++============+===++==========-==#=.-.:@#++*+===----=---==--=------- =:%+=%**++**%.-*+-++===============================+*#.-:.*@**#*+==------==------------- ===@+:-#-%+*+-=*+-==================++==============+@ -..@#++*+=++=-----==------==----- ==:-@#:#%=+=:==*+-========+======--::.:--=---::::.: :#.:..@****+==+=------=------------= =##:.***-.:-#:=*+-========---::.:+*#%@###%%%%@%%%%@@@# +@****+====-------------------- -**#*#+*%*+%%.=*+-==-====-: :+#@@#+**#%%%***++=+++=+#@@@:+#***+++=-------=-------------- -=@=++*+-*#+@:=*+-=====-.:+@@%#++#*+*-....:-==++++##@@@@@@---++++=-------=--=----------- *:@#=*=+*%+*=-=*+====---*@@%#+=*+--=*#@@@@@@@@@@@@@@@@@@@@@@*-::===--------=--=--------- -:.%#*-%@-*=.=+++=+=--#%*=-=*#%@@@@@@#*++=----==--++*#%%%#%%@@@= -------=--------------- :@=. *#+..:-%-=++--:=#+-+@@@@@%*+----=+++=++++++++++*+#*+#@%@@@@*.------=-=------=------ .@#*+%-*%=#%@:+*-..#%-+%@@%*===+++++++***++++*++++++++=*###@##%%#-.--=--=-=------==----= :#+=*-*++#*%:-++::@@#*@@@#+++***++++++*+++=+++++++++++++*###*-%*@# :----=-=------------- -:@+--*=#**%:=*+.*@%**@@#++*+*+++++++++++++++++++++++*+++*+#**%+%*..--=----------------= =-:%*:+%#*%-:=*=-@@*=#@#**+*+++==+++++=+++===+==+=+++++++***%%**%@* :---=--------------= :#.:++#=:::*+=#=:@@+#@##+++++*+++==+++=========+++++++++****+#%#*%%..------------------= :@+=#=*+%=@@+=%-:@@##%*##*++++***+=====+==++++++++++++++****+##**%@# :-----=------------ .@=+=+*-+%%@.=%--@%@%###****+=====+==+++++++++=+===+++**#**++*###*@@. ..--=---------=--= :*#=+-*+%=#%-=#--@%+*%*#****++++++++=+==++===+=++++++++**+*###*+%%#=.+- :----------=--= -:*%+.#@-@*--+#==@#%###*+**#**+++=++==+=++++++=*+=----==**+++*##**%@@@@@+.-==----------= +-.-**#.--.*-== :@#***##***+=--===+===========-+:.:-==-:=++++#%##%@@%+*@+.-----=-==----- @@=*%:+%==@@.=@@%%*###%***--..:....:.::=++=--. *@@@@@@@#+**##+*#*--*#@+.-------==----= *#-*-*+:*#@#.+@@@@#**%@***@@@@@@@@#+=+++++**+*@@@@%-.-*%@@****#*=%@#+##@-.--------=----= :@=-++=*#-@:--***=%%*#@#*%@@*- +@@@@@*=+#@@@@:: -:=###**##+#%#*#@+ :-------==----= =-@*.*##:@==+++*#+=#+=%*=*#=-=%@@@@@@@@#=++##@@@@@@@@@@@%#==+**%#=:#*+@=.--------==----- =. #*##:+::=-++=@#%@@**##*@@@@=@@. :. %@-:-+# ::. -:-::#=+***%#=**+@@-.-----===------= +=@# +.%#=+=-*+:@*=+*@@*+++..:. .:+%%#*%-:-%#=@@%*+-=+#**+=+=*##****%@+.:-----======---= =::*-@%%--===%*.#@===*@*+++**@@@@@@===+@===%*-=:-@@@@@%+==+*+##*#%==+@+ --------===----- :.=@@+.-=++=+##:=%%%#*%#*#*=----:::=++#%+::%#+**-. ..::-+****#***#*=+%-.-=--==--===---== *%@@.-=++==+#*+=+*#+=+@#**##*====+=+***#+==*%*==--==-===++++****#*+%@*.-----========---- @@-:-+++-=+##+-==+*+-+@#*++=====-=:=#%%*=+++*%#%*-:-===-=+*#**##@@@@. :-=-------===--:-: =:=++++=+#*+=-===#%=+%#***+==-::+**==*=.:::=#=*%@%#====+*******@- .---=------====---. : =++*++--**@-+*##*****@@%##*+=+=%@@@@%++-.. .-+.+@=#@%+********##@# -------=======-=--. @% +=--=+##@+--++**++*+:+@######%@@#==+#@@@@@@@@@@@#=-#@#*++*****##@# -==---====-======. @@* =*++*@%---====+***+++=#@*%@*+#@#**++===+#@@%*+-++++=+###*+*#***%@* --------=-====--: @@@+ @@#*=-:==+++=+++**+++=@@**#*+##+====---:-+*+==-=+++=-=*#*+*#**#@- -==--=--====++=. %@%%+ -::-===+=++++++++****==%@##*=+##@@@@@@@#. --+%@@###*++*#**%%@# ---=----=+==. @@#%@+ +++++++++++++++++****+=#@@#%+-=##*+**#@@@@@@@@@@@@#@@#+==+#**%@*#@@ :---=--==-. @@=#%%+ =====+=====++++++*****+--####=++=-+%*=: .:+--:++=+%#+%@@- #@@@ -==--=+: @@*+##%+ ========++++++++++****+:.@@%@@++*++*@@@@@@@@@@@@@+-=+*#%%%*%%@#:==@@@@@ .==--: @@@*=*%@+ +==++==+++*++++=+**+:. @@-@@%#*+*#*+#@%#%%%%%*++*****+**+#@@#:=:.#@@@@@= .-. @@%%#**%@ =====++*++++**= #@@@@# .@@@%+-====::------++==+===%@+@@@%-== -@@@%%@@@: @@@%%#+%@@ =+=++*+++=: .@@@@@@@@@#...@@@@#===++++==+==------#@#%@@@.:--. *@@@@@%@@@@@@###+#%#@* =++=-:. +@@@@@@@@%%@@@@*.:..*@@@@*==--==+=-:+-==*@%%@@@=.-==- :@@@@@@@@@@@@@@@##:=*. . - +=@@@@@@@@@@@%%@@@@@%===- .@@@@@%##*+**+*#@@@@@@@%..-=*=- #@@@@@@@@@@@@@@@@@@@* ..@@@@@@@@@@@@@@%%@@@@@@@@%*#*=- .@@@@@@@@@@@@@@@@@@- :==+++=. *@@%@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@%%%@@@@@@@@@*###*+--:. #@@+%@##@@@@= :.:++++++=: -@@@@@@@@@@@@@@@@@@@@@@@@@@ #@@@@@@@@@@@@@@@@@@@@@@@@%-+++##+==+. .:=+@-. ..:-+++=====-: :@@%%@@@%@@@@@@@@@@@@%@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@%:+==***+- @#@@@@@%@ +-+=======- .@@@@@@@@@@@@@@@@%%%%%@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@#.---++*=.+@@@@%.*@@@@@ --==----- @@@@@%@@@@@@@@@@@@@@@@@@%@@@* #@@@@@@@@@@@@@@@@@@@@@@@@%:--==++.@@#@=@@@@* @@@@@ .-==-=-. #@@@@@@@@@@@@@@@@@@@%%%@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@#:---===%@#.@@@=.@@@@@ .%@% :===: =@@@%@@@@@@@@@@@@%%%%%@@@@%@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@=----+@%: -@@%@@@@ ::-%@+-:: @@@%@@@@@@@@@@@@@@@@@@@@@@@@@@# #@@@@@@@@@@@@@@@@@@@@@@@@@=.-=%*-:+* @@@*@@* :---=::-%= @@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@==+::--==+ =@@@#@ +:++==---: @@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@+:=====--: @: %@@@ +:=----=-. @@@%%%@%@@@@@@@@@@@@@@@@@%%%@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@*.++===== @@@@@@@ ====-==. =@@%@@@@@@@@@@@@@@@@@%@@@@@@@@@%@@* #@@@@@@@@@@@@@@@@@@@@@@@@@+ ===--=. @@@@%:@@@ :===-=- @@@%@@@@@@@@@@@@@@@%%@@@@@@@@@@@@%* #@@@@@@@@@@@@@@@@@@@@@@@@@+ -====- @@% %@@@:@ .--=-- @@@%@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@* :-=++ @@@@@+%@+@+ ===- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@..---: @@@@@@ *@@@@ =-=. @@@@@%@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@+.:-- #@@@ @@@=.@@ -=- -@@%@@@@@@@@@@@@@@%@@@@%@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@*:+= @@-@@@@.@@@@@ - @@@@@@@@@@%@@@@@@%%@@@@%@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@= +- @@@*@@@@:@@@%=:.. @@@@@@@%@@@@@@@@@%%@@@%@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@: =. @@@@@ =@@@ +@@@ @@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@* . @@@=*@@@*@@#@@@# @@@@@@@@@@@%@@@%%@@@@@%@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@+%@@@.-@@@:%- @@@%@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@@= @@=@@@. @@@* @@@#@@@@@@@@@@@@@@%@@@@%%@@@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@@+@@@@+@@@@%@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%* #@@@@@@@@@@@@@@%@@@@@@@@@@@@ .@@@%*@%@@ @@@@ @%@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@@-@@ *@@* *@@@ @@@%@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@@@@@@@%%%@@* #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@=@@@@@@@@@@@%%@@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@@%%%%@@@@@@# #@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@-#@@@.+@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@%@@@@@%@@@@@# *###########***##*##########*@+ +%# *##- %************#*********************#**######%##* */ #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define sz(a) (int)a.size() #define pb push_back #define mp make_pair #define st first #define nd second #define endl '\n' #define fast ios_base::sync_with_stdio(NULL);cin.tie(0); cout.tie(0) #define debug(x) cout << #x << " = " << x << endl; #define vc vector #define pii pair<int,int> #define pll pair<ll,ll> struct astck { ll s; vc<ll> p; }; void solve() { int n,m,k; cin >> n>> m >> k; vc<vc<ll>> dec; vc<astck> inc; for(int i=0; i<n; ++i) { vc<ll> a(m); for(int j=0; j<m; ++j) cin >>a[j]; if(a[0]>=a[m-1]) dec.pb(a); else { vc<ll> p(m+1); for(int j=0; j<m; ++j) p[j+1]=p[j]+a[j]; inc.pb({p[m],p}); } } const ll inf=(1LL<<62); vc<ll> d(k+1,-inf); vc<ll> u(k+1,-inf); d[0]=0; u[0]=0; priority_queue<tuple<ll,int,int>> q; for(int i=0; i<sz(dec); ++i) q.push({dec[i][0],i,0}); int lim=min(k,sz(dec)*m); for(int i=1; i<=lim; ++i) { auto [v,id,pos]=q.top(); q.pop(); d[i]=d[i-1]+v; if(pos+1<m) q.push({dec[id][pos+1],id,pos+1}); } sort(all(inc), [](const astck&a, const astck&b) { return a.s>b.s; }); int s=sz(inc); vc<ll> sum(s+1); vc<ll> pref(s+1); for(int i=1; i<=s; ++i) { sum[i]=inc[i-1].s; pref[i]=pref[i-1]+sum[i]; if(1LL*i*m<=k) u[i*m]=pref[i]; } vc<ll> pre(s+1); vc<ll> suf(s+2); for(int i=1; i<m; ++i) { pre[0]=-inf; for(int j=1; j<=s; ++j) pre[i]=max(pre[j-1], inc[j-1].p[i]-sum[j]); suf[s+1]=-inf; for(int j=s; j>=1; --j) suf[j]=max(suf[j+1],inc[j-1].p[i]); for(int j=0; j<s and 1LL*i*m+i<=k; ++j) { ll best=suf[j+1]; if(pre[j]>-inf) best=max(best,sum[j+1]+pre[j]); u[i*m+i]=pref[j] +best; } } ll ans=0; for(int i=0; i<=k; ++i) { if(d[i]>-inf and u[k-i]>-inf) ans=max(ans,d[i]+u[k-i]); } cout << ans; } int main() { fast; int t=1; //cin >> t; while(t--) solve(); return 0; } |
English