program podmatice; const MAX=100; var pole1x,pole1y,pole2x,pole2y:word; { rozměry polí } pole1:array[1..MAX,1..MAX] of integer; { vstupní pole } pole2:array[1..MAX,1..MAX] of integer; rozdil:array[0..MAX+1,0..MAX+1] of integer; { pomocné pole } rozdilx,rozdily:word; { vel.pomoc.pole } max_obsah:word; { max. obsah } max_x1,max_y1:word; { poloha podmatice } max_x2,max_y2:word; max_delkax,max_delkay:word; { rozměry podmatice } a,b,c,d,e:integer; { pomocné promenne } posunx,posuny, { vzájemný posun matic } posun1x,posun1y, { posun první matice } posun2x,posun2y:integer; { posun druhé matice } vzhuru,dolu:integer; begin readln(pole1x,pole1y); for a:=1 to pole1x do for b:=1 to pole1y do read(pole1[a,b]); readln(pole2x,pole2y); for a:=1 to pole2x do for b:=1 to pole2y do read(pole2[a,b]); max_obsah:=0; for posunx:=-pole2x+1 to pole1x do for posuny:=-pole2y+1 to pole1y do begin rozdilx:=pole2x+posunx; if rozdilx>pole1x then rozdilx:=pole1x+1 else rozdilx:=rozdilx+1; rozdily:=pole2y+posuny; if rozdily>pole1y then rozdily:=pole1y+1 else rozdily:=rozdily+1; if posunx<=0 then posun1x:=0 else posun1x:=posunx; if posuny<=0 then posun1y:=0 else posun1y:=posuny; if posunx>=0 then posun2x:=0 else posun2x:=-posunx; if posuny>=0 then posun2y:=0 else posun2y:=-posuny; for a:=0 to rozdilx do { příprava pomocného } for b:=0 to rozdily do { pole pro daný posun } if (a=0) or (b=0) or (a=rozdilx) or (b=rozdily) or (pole1[a+posun1x,b+posun1y]<>pole2[a+posun2x,b+posun2y]) then rozdil[a,b]:=0 else rozdil[a,b]:=rozdil[a,b-1]+1; for a:=0 to rozdilx do for b:=rozdily downto 0 do if rozdil[a,b]=0 then c:=0 else if c=0 then c:=-1 else begin rozdil[a,b]:=c; dec(c) end; for b:=0 to rozdily do for a:=0 to rozdilx do if rozdil[a,b]=0 then begin c:=0; vzhuru:=0; dolu:=0; end else begin if rozdil[a,b]>0 then begin d:=rozdil[a,b]-1; {nad} e:=0; {pod} end else begin e:=-rozdil[a,b]; {pod} d:=rozdil[a,b]-e-1; {nad} end; if c=0 then begin c:=1; vzhuru:=d; dolu:=e; end else begin inc(c); if vzhuru>d then vzhuru:=d; if dolu>e then dolu:=e; end; if c*(vzhuru+dolu+1)>max_obsah then begin max_obsah:=c*(vzhuru+dolu+1); max_x1:=a+posun1x-c+1; max_y1:=b+posun1y-vzhuru; max_x2:=a+posun2x-c+1; max_y2:=b+posun2y-vzhuru; max_delkax:=c; max_delkay:=vzhuru+dolu+1; end end end; writeln(max_obsah); if max_obsah>0 then begin writeln(max_x1,' ',max_y1); writeln(max_x2,' ',max_y2); writeln(max_delkax,' ',max_delkay); end end.