var i,j,n,tot,x,max:longint;
f,g:array[-1..101,-1..10000]of boolean;
v:array[1..150]of longint;
flag:boolean;
procedure work(k:longint);
var i,j,sum:longint;
begin
fillchar(f,sizeof(f),false);
sum:=0;
for i:=1 to tot do sum:=sum+v[i];
if max<sum then max:=sum;
f[0,0]:=true;
for i:=1 to tot do
for j:=sum downto 0 do
begin
if j-v[i]>=0 then f[i,j]:=(f[i-1,j-v[i]])or(f[i-1,j])
else f[i,j]:=f[i-1,j];
end;
for j:=1 to sum do if f[tot,j] then g[k,j]:=true;
end;
begin
fillchar(g,sizeof(g),false);
readln(n);max:=0;
for i:=1 to n do
begin
tot:=0;
for j:=1 to 150 do
begin
read(v[j]);
if v[j]=-1 then begin
tot:=j-1;
break;
end;
end;
work(i);
end;
for i:=max downto 0 do
begin
flag:=true;
for j:=1 to n do
if g[j,i]=false then
begin
flag:=false;
break;
end;
if flag then begin
writeln(i);break;end;
end;
if flag=false then writeln(0);
readln;readln;
end.