#line 1 "template/template.hpp" #include #if __has_include() #include #endif using namespace std; using int64 = long long; const int64 infll = (1LL << 62) - 1; const int inf = (1 << 30) - 1; struct IoSetup { IoSetup() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(10); cerr << fixed << setprecision(10); } } iosetup; template ostream& operator<<(ostream& os, const pair& p) { os << p.first << " " << p.second; return os; } template istream& operator>>(istream& is, pair& p) { is >> p.first >> p.second; return is; } template ostream& operator<<(ostream& os, const vector& v) { for (size_t i = 0; i < v.size(); i++) { os << v[i] << (i + 1 != v.size() ? " " : ""); } return os; } template istream& operator>>(istream& is, vector& v) { for (T& in : v) is >> in; return is; } template bool chmax(T1& a, T2 b) { return a < b && (a = b, true); } template bool chmin(T1& a, T2 b) { return a > b && (a = b, true); } template vector make_v(size_t a) { return vector(a); } template auto make_v(size_t a, Ts... ts) { return vector(ts...))>(a, make_v(ts...)); } template enable_if_t == 0> fill_v(T& t, const V& v) { t = v; } template enable_if_t != 0> fill_v(T& t, const V& v) { for (auto& e : t) fill_v(e, v); } template struct FixPoint : F { explicit FixPoint(F&& f) : F(std::forward(f)) {} template decltype(auto) operator()(Args&&... args) const { return F::operator()(*this, std::forward(args)...); } }; template decltype(auto) MFP(F&& f) { return FixPoint{std::forward(f)}; } int main() { int64 S, T, N; cin >> S >> T >> N; auto M = make_v< int64 >(3, 3); cin >> M; vector< int64 > pow100(N + 1, 1); for (int i = 1; i <= N; i++) { pow100[i] = pow100[i - 1] * 100; } vector dp(N + 1, vector(T, 0ll)); for (int n = 1; n <= N; n++) { for (int w = 1; w < T; w++) { for (int x = 1; x <= w; x++) { int64 v = 0; for (int i = 0; i < 3; i++) { auto nxt = w - x + M[i][1] * x / M[i][2]; if (nxt >= T) { v += M[i][0] * pow100[n - 1]; } else { v += M[i][0] * dp[n - 1][nxt]; } } chmax(dp[n][w], v); } } } vector< int > ret; for (int x = 1; x <= S; x++) { int64 v = 0; for (int i = 0; i < 3; i++) { auto nxt = S - x + M[i][1] * x / M[i][2]; if (nxt >= T) { v += M[i][0] * pow100[N - 1]; } else { v += M[i][0] * dp[N - 1][nxt]; } } if (v == dp[N][S]) { ret.emplace_back(x); } } cout << dp[N][S] / pow100[N - 1] << endl; cout << ret.size() << endl; cout << ret << endl; }