package no3461_minGCD; import java.util.*; public class Main { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long k = sc.nextLong(); ArrayList> l = new ArrayList<>(); int[] b = new int[n]; int disable = 100001; for(int i = 0;i < n;i++) { int a = sc.nextInt(); l.add(new ArrayList<>()); for(int j = 1;j * j <= a;j++) { if((a % j) == 0) { if(j * j != a) { l.get(i).add(j); l.get(i).add(a / j); }else { l.get(i).add(j); } } }Collections.sort(l.get(i)); disable = Math.min(a + 1, disable); }for(int j = 0;j < n;j++) { b[j] = sc.nextInt(); }int left = 1; int right = disable; while(left < right - 1) { int mid = (left + right)/2; long sum = 0; for(int i = 0;i < n;i++) { int min = Integer.MAX_VALUE; for(int s:l.get(i)) { if(s >= mid) { int t = (b[i] + s - 1)/s * s; min = Math.min(min, t - b[i]); } }sum += min; }//System.out.println(sum + " " + mid); if(sum <= k) { left = mid; }else { right = mid; } }System.out.println(left); } }