#include #include #include #include #define mt std::make_tuple typedef std::tuple T; int A[3], Db, B[3], Dc, C[3]; int dp[11][101][10001]; std::vector bv, cv; int rec(int a1, int a2, int a3){ if(dp[a1][a2][a3] != -1){return dp[a1][a2][a3];} int res = 0; for(auto t : bv){ if(a1 >= std::get<0>(t) && a2 >= std::get<1>(t) && a3 >= std::get<2>(t)){ res = std::max(res, 1+rec(a1-std::get<0>(t)+B[0], a2-std::get<1>(t)+B[1], a3-std::get<2>(t)+B[2])); } } for(auto t : cv){ if(a1 >= std::get<0>(t) && a2 >= std::get<1>(t) && a3 >= std::get<2>(t)){ res = std::max(res, 1+rec(a1-std::get<0>(t)+C[0], a2-std::get<1>(t)+C[1], a3-std::get<2>(t)+C[2])); } } return dp[a1][a2][a3] = res; } int main(){ for(int i=0;i<3;i++){scanf("%d", A+i);} scanf("%d", &Db); for(int i=0;i<3;i++){scanf("%d", B+i);} scanf("%d", &Dc); for(int i=0;i<3;i++){scanf("%d", C+i);} for(int i=0;i<=10;i++){ for(int j=0;j<=100;j++){ for(int k=0;k<=10000;k++){ int s = i*1000 + j*100 + k*1; if(s > 10000){continue;} if(s == Db){bv.push_back(mt(i, j, k));} if(s == Dc){cv.push_back(mt(i, j, k));} } } } memset(dp, -1, sizeof(dp)); printf("%d\n", rec(A[0], A[1], A[2])); }