#include #include #define rep(i, n) for(i = 0; i < n; i++) #define int long long using namespace std; int n, K; int a[100000]; int b[100000]; vector yakus[100001]; int f(int x) { int sumC = 0; for (int i = 0; i < n; i++) { int minC = 1e+11; for (int j = (int)yakus[a[i]].size() - 1; j >= 0; j--) { int y = yakus[a[i]][j]; if (y < x) break; int c = 0; if (b[i] % y != 0) c = y - b[i] % y; minC = min(minC, c); if (minC == 0) break; } sumC += minC; } return sumC; } signed main() { int i; cin >> n >> K; rep(i, n) cin >> a[i]; rep(i, n) cin >> b[i]; for (i = 1; i <= 100000; i++) { for (int j = i; j <= 100000; j += i) { yakus[j].push_back(i); } } int ok = 1, ng = 100001, mid; while (ng - ok >= 2) { mid = (ok + ng) / 2; if (f(mid) <= K) ok = mid; else ng = mid; } cout << ok << endl; return 0; }