type vector=array[0..1010]of longint;
var v3,v,mv,mv3,zero:vector;
m,s:array[1..520,1..520]of longint;
n,i,j,k,l1,l2,c1,c2:longint;
function gasit(n:longint;var v,mk:vector):boolean;
var i:longint;
begin
gasit:=false;
for i:=1 to v[0] do
if (v[i]=n)and(mk[i]=0) then
begin
mk[i]:=1;
gasit:=true;
exit;
end;
end;
begin
assign(input,'zone.in');reset(input);
assign(output,'zone.out');rewrite(output);
readln(n);
for i:=1 to 9 do
read(v[i]);
v[0]:=9;
for i:=1 to n do
for j:=1 to n do
read(m[i,j]);
s[1,1]:=1;
for i:=2 to n do
begin
s[1,i]:=s[1,i-1]+m[1,i];
s[i,1]:=s[i-1,1]+m[i,1];
end;
for i:=2 to n do
for j:=2 to n do
s[i,j]:=s[i-1,j]+s[i,j-1]+m[i,j]-s[i-1,j-1];
for i:=1 to 9 do
for j:=i+1 to 9 do
for k:=j+1 to 9 do
begin
inc(v3[0]);
v3[v3[0]]:=v[i]+v[j]+v[k];
end;
for l1:=1 to n-2 do
begin
if gasit(s[l1,n],v3,mv3) then
begin
for l2:=l1+1 to n-1 do
if gasit(s[l2,n]-s[l1,n],v3,mv3)and(gasit(s[n,n]-s[l2,n],v3,mv3))
then begin
mv:=zero;
for c1:=1 to n-2 do
if gasit(s[l1,c1],v,mv)and(gasit(s[l2,c1]-s[l1,c1],v,mv))and(gasit(s[n,c1]-s[l2,c1],v,mv))
then begin
for c2:=c1+1 to n-1 do
begin
mv:=zero;
if gasit(s[l1,c1],v,mv)and
(gasit(s[l2,c1]-s[l1,c1],v,mv))and
(gasit(s[n,c1]-s[l2,c1],v,mv))and
(gasit(s[l1,c2]-s[l1,c1],v,mv))and
(gasit(s[l2,c2]-s[l1,c2]-s[l2,c1]+s[l1,c1],v,mv))and
(gasit(s[n,c2]-s[l2,c2]-s[n,c1]+s[l2,c1],v,mv))and
(gasit(s[l1,n]-s[l1,c2],v,mv))and
(gasit(s[l2,n]-s[l1,n]-s[l2,c2]+s[l1,c2],v,mv))and
(gasit(s[n,n]-s[l2,n]-s[n,c2]+s[l2,c2],v,mv))
then
begin
writeln(l1,' ',l2,' ',c1,' ',c2);
close(output);
halt;
end;
end;
end;
end;
end;
end;
close(input);close(output);
end.