/* -*- coding: utf-8 -*- * * 3681.cc: No.3681 蠢・・豐ク鬨ー遏ウ - yukicoder */ #include #include #include #include using namespace std; /* constant */ /* typedef */ using ll = long long; /* global variables */ /* subroutines */ /* main */ int main() { int r, p, q, as[3], d; scanf("%d%d%d%d%d%d%d", &r, &p, &q, as, as + 1, as + 2, &d); sort(as, as + 3, greater()); //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); int sum = 0; // 0. use as only int x0 = min(as[2], r / p); sum += x0; as[0] -= x0, as[1] -= x0, as[2] -= x0; r -= x0 * p; //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); if (r < p) { printf("%d\n", sum); return 0; } assert(as[2] == 0); // 1. use d, as[0], as[1] (as[2] == 0) int x1 = min({as[1], d + (as[0] - as[1]), r / (q + p)}); sum += x1; as[0] -= x1, as[1] -= x1; if (x1 <= d) d -= x1; else as[0] -= x1 - d, d = 0; r -= x1 * (q + p); //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); if (r < q + p) { printf("%d\n", sum); return 0; } assert(as[1] == 0); // 2. use d, as[0] (as[1] == as[2] == 0) ll q2p = q * 2LL + p; int x2 = min({(ll)as[0], (ll)(as[0] + d) / 3, r / q2p}); sum += x2; as[0] -= x2; if (x2 * 2 <= d) d -= x2 * 2; else as[0] -= x2 * 2 - d, d = 0; r -= x2 * q2p; //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); if (r < q2p) { printf("%d\n", sum); return 0; } assert(as[0] == 0); // 3. use d only (as[0] == as[1] == as[2] == 0) ll q3p = q * 3LL + p; int x3 = min((ll)d / 3, r / q3p); sum += x3; d -= x3 * 3; r -= x3 * q3p; //printf(" %d,%d,%d: %d,%d,%d,%d\n", r, p, q, as[0], as[1], as[2], d); printf("%d\n", sum); return 0; }