def check(y, req, stk, cst, bgt):
tot = 0
for i in range(len(req)):
need = y * req[i]
diff = max(0, need - stk[i])
tot += diff * cst[i]
return tot <= bgt
def solve(req, stk, cst, bgt):
low = 0
high = 10**12
ans = 0
while low <= high:
mid = (low + high) // 2
if check(mid, req, stk, cst, bgt):
ans = mid
low = mid + 1
else:
high = mid - 1
return ans
ZGVmIGNoZWNrKHksIHJlcSwgc3RrLCBjc3QsIGJndCk6CiAgICB0b3QgPSAwCiAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVxKSk6CiAgICAgICAgbmVlZCA9IHkgKiByZXFbaV0KICAgICAgICBkaWZmID0gbWF4KDAsIG5lZWQgLSBzdGtbaV0pCiAgICAgICAgdG90ICs9IGRpZmYgKiBjc3RbaV0KICAgIHJldHVybiB0b3QgPD0gYmd0CgpkZWYgc29sdmUocmVxLCBzdGssIGNzdCwgYmd0KToKICAgIGxvdyA9IDAKICAgIGhpZ2ggPSAxMCoqMTIKICAgIGFucyA9IDAKICAgIAogICAgd2hpbGUgbG93IDw9IGhpZ2g6CiAgICAgICAgbWlkID0gKGxvdyArIGhpZ2gpIC8vIDIKICAgICAgICAKICAgICAgICBpZiBjaGVjayhtaWQsIHJlcSwgc3RrLCBjc3QsIGJndCk6CiAgICAgICAgICAgIGFucyA9IG1pZAogICAgICAgICAgICBsb3cgPSBtaWQgKyAxCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDEKICAgICAgICAgICAgCiAgICByZXR1cm4gYW5z