import java.util.Scanner; public class Main { static final int N = 200005; static long n, m; static int[] a = new int[N]; static int[] b = new int[N]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextLong(); m = sc.nextLong(); for (int i = 1; i <= n; ++i) a[i] = sc.nextInt(); for (int i = 1; i <= n; ++i) b[i] = sc.nextInt(); //准备开始进行二分查找 int l = 0, r = N * 2; while (l < r) { int mid = (l + r + 1) >> 1; if (check(mid)) l = mid; else r = mid - 1; } System.out.println(r); } public static boolean check(int x) { long v = m;//现在拥有的卡牌数 for (int i = 1; i <= n; ++i) { if (a[i] >= x) continue; if (a[i] + b[i] < x) return false; if (a[i] + b[i] >= x && v >= x - a[i]) v -= (x - a[i]); else return false; } return true; } }