import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### """ |a||x - b / a| -1 -1 1 1 1 1 0 2 4 6 -1 -1 1 1 0 2 4 rui[i] >= s / 2 """ BIG = 10 ** 20 def f(a, b): if b < 0: a = -a b = -b return (2 * a * BIG + b) // (2 * b) n = ni() a = na() b = na() idx = [i for i in range(n) if a[i] != 0] a = [a[i] for i in idx] b = [b[i] for i in idx] n = len(a) s = sorted(range(n), key = lambda i: f(b[i], a[i])) rui = [0] * (n + 1) for i in range(n): rui[i+1] = rui[i] + abs(a[s[i]]) * 2 from bisect import bisect_left t = rui[-1] // 2 i = s[bisect_left(rui, t) - 1] mod = 10 ** 9 + 7 # print(rui, i) print(b[i] * pow(a[i], mod-2, mod) % mod)