#include #include using namespace std; int H,W,K; int A[600][600],B[600][600]; long solve(int up,long c2,long c1,long c0) { assert(c2<0); long mx=-c1/(2*c2); long l=mx-20,r=mx+20; long ret=0; if(r<0)r=0; if(l>up)l=up; for(int x=max(0L,l);x<=min((long)up,r);x++)ret=max(ret,x*x*c2+x*c1+c0); return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>H>>W>>K; for(int i=0;i>A[i][j]; for(int i=0;i>B[i][j]; long S=0; for(int i=0;ib)swap(a,b),swap(X,Y); if(c<=a) {//only c int t=K>>c; X+=t; Y+=t; S=max(S,X*Y); } else if(c<=b) {//only a and c int up=K>>c; //0<=C<=up, (X+(K>>a)-C*((1<>a)-Y*((1<>a))*Y; S=max(S,solve(up,c2,c1,c0)); } else {//only a and b int up=K>>b; //0<=B<=up, (X+(K>>a)-B*(1<>a)-Y*(1<>a))*Y; S=max(S,solve(up,b2,b1,b0)); } } cout<