def sieves(nn: int): is_prime = [True] * nn least_p = [-1] * nn is_prime[0] = is_prime[1] = False least_p[1] = 1 mobius = [1] * nn mobius[0] = 0 for p in range(2, nn): if not is_prime[p]: continue least_p[p] = p mobius[p] = -1 for q in range(p * 2, nn, p): is_prime[q] = False if least_p[q] == -1: least_p[q] = p if q % (p * p) == 0: mobius[q] = 0 else: mobius[q] *= -1 primes = [p for p in range(2, nn) if is_prime[p]] return is_prime, least_p, primes, mobius def prime_factorize(n: int): ans = {} while n > 1: p = least_p[n] e = 0 while n % p == 0: n //= p e += 1 ans[p] = e return ans def get_divisors(n: int): """正の約数列挙 Args: n (int): 約数を求める数 (>= 1) Returns: list[int]: `n`の正の約数 Notes: - `n`の約数の個数をσ(n)として - 計算量 Θ( σ(n) * log(σ(n)) ) - n <= 10^7 で σ(n) <= σ(8648640) = 448 - n <= 10^9 で σ(n) <= σ(735134400) = 1344 - n <= 10^18 で σ(n) <= σ(897612484786617600) = 103680 """ pe = prime_factorize(n) ans = [1] for p, e in pe.items(): exps = [p ** ei for ei in range(1, e + 1)] ans.extend([d * f for d in ans for f in exps]) ans.sort() return ans is_prime, least_p, primes, mobius = sieves(10**5 + 100) from collections import defaultdict n, k = map(lambda s_: int(s_), input().split()) a = tuple(map(lambda s_: int(s_), input().split())) b = tuple(map(lambda s_: int(s_), input().split())) cost = [[] for _ in range(n)] for i in range(n): ai, bi = a[i], b[i] ci = cost[i] ds = get_divisors(ai) dcd = defaultdict(int) for d in ds: dcd[(bi + d - 1) // d * d - bi] = d for c, d in sorted(dcd.items()): if ci and ci[-1][0] > d: continue else: ci.append((d, c)) import bisect # for ci in cost: # print(ci) def check(g): ans = 0 for ci in cost: ok = len(ci) ng = -1 while abs(ok - ng) > 1: mi = (ok + ng) // 2 if ci[mi][0] >= g: ok = mi else: ng = mi # i = bisect.bisect_left(ci, (g, 0)) i = ok if i == len(ci): # print(">>", ci, g, i) return False ans += ci[i][1] # print(">", g, ": ", ans) return ans <= k ok = 0 ng = min(a) + 1 while abs(ok - ng) > 1: mi = (ok + ng) // 2 if check(mi): ok = mi else: ng = mi print(ok) # for i in range(1, 10): # print(check(i))