//时间复杂度稍微慢了点,可以写快读
import java.util.Scanner;
public class Main {
static long []a;
static long []b;
static long k;
static int n;
public static boolean check (long mid){
long need = 0;
for (int i = 0; i < n; i) {
if (b[i]/a[i]< mid){
need += mid * a[i] - b[i] ;
if (need >k){
return false;
}
}
}
return true;
}
public static void main(String[] args) {
long r = Integer.MAX_VALUE;
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
k = scanner.nextInt();
a = new long[n];
b = new long[n];
long sum = 0;
long sum1 = 0;
for (int i = 0; i < n; i) {a[i] = scanner.nextInt();
sum += a[i];
}
for (int i = 0; i < n; i++) {b[i] = scanner.nextInt();
sum1 += b[i];
}
if (sum >sum1+k) {
System.out.println(0);
}else {
long l = 0;
while (l < r) {
long mid = l + (r - l + 1) / 2;
if (check(mid)) {
l = mid;
} else {
r = mid - 1;
}
}
System.out.println(l);
}
}
}