#include using namespace std; #include using namespace atcoder; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n, b; cin >> n >> b; vector C(n), S(n); for (auto &x : C) cin >> x; for (auto &x : S) cin >> x; const int MAXC = 100000; fenwick_tree fw(MAXC + 1); fenwick_tree fw2(MAXC + 1); auto add_item = [&](ll c, ll s, ll sign) { fw.add(c, sign * c * s); fw2.add(c, sign * s); }; for (int i = 0; i < n; i++) { add_item(C[i], S[i], +1); } auto calc = [&]() -> ll { ll l = 0, r = MAXC + 1; while (r - l > 1) { ll mid = (l + r) / 2; if (fw.sum(0, mid) <= b) { l = mid; } else { r = mid; } } ll used = fw.sum(0, l); ll cnt = fw2.sum(0, l); if (l >= 1) { ll have = fw2.sum(l, l + 1); ll can = (b - used) / l; cnt += min(have, can); } return cnt; }; ll ans = 0; for (int i = 0; i < n; i++) { add_item(C[i], S[i], -1); add_item(1, S[i], +1); ans = max(ans, calc()); // 元に戻す add_item(1, S[i], -1); add_item(C[i], S[i], +1); } cout << ans << '\n'; }