program sud;
type
matrix=array[1..200,1..2] of integer;
var
f,g:text;
lepes:array[1..200] of integer;
a1,a2:array[1..100,1..100] of integer;
a3,a4:matrix;
k,n:integer;
procedure beolvas;
var
i,j:integer;
begin
readln(f,n);
i:=0;
for i:=1 to n do begin
for j:=1 to n do begin
read(f,a1[i,j]);
a2[i,j]:=a1[i,j];
end;
readln(f);
end;
readln(f,k);
for i:=1 to k do
read(f,lepes[i]);
end;
procedure varial(i,j,db:integer);
var
ii,jj:integer;
begin
inc(db);
if db<=k then begin
ii:=i+lepes[db];
jj:=j+lepes[db];
if ii<=n then begin
if a1[ii,j]<>a2[ii,j] then begin {ha nem egyenlo
akkor mar volt ott tehat azzal folytatjuk ami nagyobb megoldast ad}
if a2[i,j]+a1[ii,j]>a2[ii,j] then begin
a2[ii,j]:=a1[ii,j]+a2[i,j];
a3[db,1]:=ii;
a3[db,2]:=j;
if (ii=n) and (j=n) then a4:=a3;
varial(ii,j,db)
end;
end
else begin a2[ii,j]:=a1[ii,j]+a2[i,j];
a3[db,1]:=ii;
a3[db,2]:=j;
if (ii=n) and (j=n) then a4:=a3;
varial(ii,j,db)
end;
end;
if jj<=n then begin
if a1[i,jj]<>a2[i,jj] then begin {ha nem egyenlo akkor mar volt ott tehat azzal folytatjuk ami nagyobb megoldast}
if a2[i,j]+a1[i,jj]>a2[i,jj] then begin
a2[i,jj]:=a1[i,jj]+a2[i,j];
a3[db,1]:=i;
a3[db,2]:=jj;
if (i=n) and (jj=n) then a4:=a3;
varial(i,jj,db)
end;
end
else begin a2[i,jj]:=a1[i,jj]+a2[i,j];
a3[db,1]:=i;
a3[db,2]:=jj;
if (i=n) and (jj=n) then a4:=a3;
varial(i,jj,db)
end;
end;
end;
end;
procedure kiir;
var
i:integer;
begin
writeln(g,'1 1');
for i:=1 to k do
writeln(g,a4[i,1],' ',a4[i,2]);
end;
begin
assign(f,'sudest.in');
assign(g,'sudest.out');
reset(f);
rewrite(g);
beolvas; {beolvasom a matrixot es beolvasom a lepesek szamat!}
varial(1,1,0);
writeln(g,a2[n,n]);
kiir;
close(g);
end.