显示代码纯文本
var
c,q:byte;
u,v,i,j,k,max,right,x:integer;
ans:longint;
p,f,h:array[1..700,1..700] of integer;
begin
assign(input,'land.in'); reset(input);
assign(output,'land.out'); rewrite(output);
readln(u,v,c);
c:=c+1;
for i:=1 to v do for j:=1 to u do read(h[i,j]);
for i:=1 to v do for j:=1 to u do p[i,j]:=((h[i,j]) div c)*c;
for q:=0 to c-1 do begin
for i:=1 to v do for j:=1 to u do if h[i,j]+q-p[i,j]>=c then p[i,j]:=p[i,j]+c;
for i:=1 to u do begin
f[1,i]:=1;
for j:=2 to v do
if p[j,i]=p[j-1,i] then f[j,i]:=f[j-1,i]+1
else f[j,i]:=1;
end;
for i:=1 to u do
for j:=1 to v do begin
max:=f[j,i];
if f[j,i]>ans then ans:=f[j,i];
if i=u then continue;
k:=i;
right:=i+100;
if right>u then right:=u;
repeat
if f[j,k]<max then max:=f[j,k];
inc(k);
if max*(k-i)>ans then ans:=max*(k-i);
until (k=right) or (p[j,i]<>p[j,k]);
end;
end;
writeln(ans);
close(input); close(output);
end.