{
TASK:lab101
LANG:PASCAL
}
program lab101;

const
	MAXN				= 10;

type
	Integer				= LongInt;
	TPoint				= record
		x, y, d			: Integer;
	end;

var
	a				: Array [1 .. MAXN, 1 .. MAXN] of Integer;
	used				: Array [1 .. MAXN, 1 .. MAXN] of Boolean;
	q				: Array [1 .. MAXN * MAXN] of TPoint;
	qb, qe				: Integer;
	p, n, m				: Integer;
	i, j				: Integer;
	x1, x2, y1, y2			: Integer;
	d1, d2				: Integer;
	x, y				: Integer;
	cx, cy, cd			: Integer;


procedure add(x, y, d: Integer);
begin
	if (x > 0) and (x <= n) and (y > 0) and (y <= m) and (not used[x, y]) and (a[x, y] = 0) then begin
		qb := qb - 1;
		q[qb].x := x;
		q[qb].y := y;
		q[qb].d := d;
		used[x, y] := True;
	end;
end;

begin
	readln(n, m);
	for i := 1 to n do begin
		for j := 1 to m do
			read(a[i, j]);
		readln;
	end;
	readln(p);
	if (p = 0) then begin
		readln(x1, y1);
		readln(x2, y2);
		readln(x, y);
		FillChar(used, sizeof(used), False);
		qb := MAXN*MAXN;
		qe := qb;
		q[qb].x := x1; q[qb].y := y1; q[qb].d := 0;
		used[x1, y1] := True;
		d1 := maxlongint;
		while (qb <= qe) do begin
			cx := q[qe].x; cy := q[qe].y; cd := q[qe].d;
			qe := qe -1;
			if (cx = x) and (cy = y) then begin 
				d1 := cd;
				break;
			end;
			add(cx+1, cy, cd+1);
			add(cx-1, cy, cd+1);
			add(cx, cy+1, cd+1);
			add(cx, cy-1, cd+1);
		end;


		FillChar(used, sizeof(used), False);
		qb := MAXN*MAXN;
		qe := qb;
		q[qb].x := x2; q[qb].y := y2; q[qb].d := 0;
		used[x2, y2] := True;
		d2 := maxlongint;
		while (qb <= qe) do begin
			cx := q[qe].x; cy := q[qe].y; cd := q[qe].d;
			qe := qe - 1;
			if (cx = x) and (cy = y) then begin 
				d2 := cd;
				break;
			end;
			add(cx+1, cy, cd+1);
			add(cx-1, cy, cd+1);
			add(cx, cy+1, cd+1);
			add(cx, cy-1, cd+1);
		end;
		if (d1 <= d2) then
			writeln(1)
		else
			writeln(2);
	end else writeln(n*m*p mod 3);
end.