#pragma GCC optimize("Ofast") #include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; long long k; cin >> n >> k; vector a(n), b(n); for (int i = 0; i < n; ++i) cin >> a[i]; for (int i = 0; i < n; ++i) cin >> b[i]; vector> d(1e5 + 1); for (int i = 1; i <= 1e5; ++i) for (int j = 1; i * j <= 1e5; ++j) d[i * j].push_back(i); vector>> nv; for (int i = 0; i < n; ++i) { int siz = d[a[i]].size(); vector> v; for (int j = 0; j < siz; ++j) { int tmp = (b[i] + d[a[i]][j] - 1) / d[a[i]][j] * d[a[i]][j]; while (!v.empty() && v.back().first >= tmp) v.pop_back(); v.push_back({tmp, d[a[i]][j]}); } siz = v.size(); for (int j = 1; j < siz; ++j) { int c = v[j].first - v[j - 1].first; nv.push_back({v[j - 1].second, {c, i}}); } } sort(nv.begin(), nv.end()); for (auto [_, cid] : nv) { auto [c, id] = cid; if (k < c) break; b[id] += c; k -= c; } long long ans = 1e9; for (int i = 0; i < n; ++i) ans = min(ans, __gcd(a[i], b[i])); cout << ans << endl; }