var
i,n,m,t:longint;
bu,ru,ave:real;
a,b,r:array[0..52] of longint;
procedure sort(l,rr:longint);
var
i,j,x,y:longint;
begin
i:=l;j:=rr;x:=a[(l+rr)div 2];
repeat
while a[i]<x do i:=i+1;
while a[j]>x do j:=j-1;
if i<=j then
begin
y:=a[i];a[i]:=a[j];a[j]:=y;
y:=b[i];b[i]:=b[j];b[j]:=y;
y:=r[i];r[i]:=r[j];r[j]:=y;
i:=i+1;j:=j-1;
end;
until i>j;
if l<j then sort(l,j);
if i<rr then sort(i,rr);
end;
begin
readln(n); bu:=0; ru:=0;
for i:=1 to n do begin read(a[i]); end;readln;
for i:=1 to n do begin read(r[i]);ru:=ru+r[i]; end;readln;
readln(m);
for i:=1 to n do begin b[i]:=a[i]*r[i];bu:=bu+b[i]; end;
ave:=bu/ru;
sort(1,n);
if ave-m<0.00000005 then begin writeln(ru:0:5); halt; end;
if ave>m then
begin
t:=n;
while ((bu-b[t])/(ru-r[t])>m)and(t>=1) do
begin bu:=bu-b[t]; ru:=ru-r[t]; t:=t-1; end;
if t=0 then begin writeln('0.00000');halt;end;
writeln(ru+((m-bu/ru)*ru)/(a[t]-m):0:5); halt;
end;
if ave<m then
begin
t:=1;
while ((bu-b[t])/(ru-r[t])<m)and(t<=n) do
begin bu:=bu-b[t]; ru:=ru-r[t]; t:=t+1; end;
if t=n then begin writeln('0.00000');halt;end;
writeln(ru+(ru*(m-bu/ru))/(a[t]-m):0:5);
end;
end.