#include #include #include #include using namespace std; struct MONEY{ int c1000, c100, c1,cnt; }; int DP[11][101][10001]; int main() { vectorA(3); cin >> A[0] >> A[1] >> A[2]; int Db; cin >> Db; vectorB(3); cin >> B[0] >> B[1] >> B[2]; int Dc; cin >> Dc; vectorC(3); cin >> C[0] >> C[1] >> C[2]; queue que; que.push({ A[0], A[1], A[2] , 0 }); int maxCnt = 0; while (!que.empty()){ int b = Db, c = Dc; MONEY Co = que.front(); que.pop(); maxCnt = max(maxCnt, Co.cnt); if (DP[Co.c1000][Co.c100][Co.c1] != 0 && DP[Co.c1000][Co.c100][Co.c1] >= maxCnt)continue; else DP[Co.c1000][Co.c100][Co.c1] = maxCnt; int c1000 = Co.c1000, c100 = Co.c100, c1 = Co.c1; for (int i = c1000; i > 0; i--){ if (b >= 1000 * i){ b -= 1000 * i; c1000 -= i; break; } } for (int i = c100; i > 0; i--){ if (b >= 100 * i){ b -= 100 * i; c100 -= i; break; } } if (c1 >= b){ c1 -= b; b = 0; } if (b == 0) que.push({ c1000+B[0], c100+B[1], c1+B[2] , Co.cnt+1 }); c1000 = Co.c1000, c100 = Co.c100, c1 = Co.c1; for (int i = c1000; i > 0; i--){ if (c >= 1000 * i){ c -= 1000 * i; c1000 -= i; break; } } for (int i = c100; i > 0; i--){ if (c >= 100 * i){ c -= 100 * i; c100 -= i; break; } } if (c1 >= c){ c1 -= c; c = 0; } if (c == 0) que.push({ c1000 + C[0], c100+C[1], c1+C[2] , Co.cnt+1 }); } cout << maxCnt << endl; return 0; }