program cl; const Maxn = 10; var a : array[1..Maxn,1..Maxn]of integer; b : array[1..Maxn]of integer; i,j,n : integer; min : integer; nach,kon : integer; nnew : array[1..Maxn]of boolean; procedure PG(k : integer;v : integer;lmin : integer); var i : integer; lm : integer; begin nnew[v] := true; if k > 0 then lm := (b[v] + k - 1) div k else lm := maxint; if lm < lmin then lmin := lm; if v = kon then begin if lmin > min then min := lmin; end else for i := 1 to n do if (a[v,i] > 0) and (not nnew[i]) then PG(k + 1,i,lmin); nnew[v] := false; end; begin fillchar(nnew,sizeof(nnew),false); assign(input,'cl_resh.in');reset(input); readln(n); for i := 1 to n do for j := 1 to n do read(a[i,j]); for i := 1 to n do read(b[i]); readln(nach,kon); min := 0; PG(0,nach,maxint); writeln(min); end.