program Untitled;
var
   l, n, i, j, k, max, raz, po : integer;
   w : longint;
   a, b : array [ 1..100, 1..1000 ] of longint;
   s : array [ 1..100 ] of integer;
begin
     readln ( w, l, n );
     for i := 1 to n do
     begin
          for j := 1 to l do
          begin
               read ( a[i, j] );
          end;
          readln;
          for j := 1 to l do
          begin
               read ( b[i, j] );
          end;
          readln;
     end;
     s[1] := 1;
     max := 1;
     po := 0;
     for i := 2 to n do
     begin
          for j := i - 1 downto 1 do
          begin
               if ( a[i - j, 1] - a[i, 1] <> b[i, 1] - b[i - j, 1] ) and ( po = 0 ) then
               begin
                    s[i] := max + 1;
                    max := max + 1;
                    po := 1;
                    raz := 1;
               end;
               for k := 2 to l do
               begin
                    if ( a[i - j, k] - a[i, k] <> b[i, k] - b[i - j, k] ) or ( a[i, k] - a[i, k - 1] <> a[i - j, k] - a[i - j, k - 1] ) or ( b[i, k] - b[i, k - 1] <> b[i - j, k] - b[i - j, k - 1] ) then
                    begin
                         if po = 0 then
                         begin
                              s[i] := max + 1;
                              max := max + 1;
                              po := 1;
                              break;
                         end;
                         raz := 1;
                    end;
               end;
               if raz = 0 then
               begin
                    s[i] := s[i - j];
                    break;
               end;
               raz := 0;
          end;
          po := 0;
     end;
     max := 0;
     for i := 1 to n do
         if s[i] > max then max := s[i];
     writeln ( max );
readln;
end.
