#include #include using namespace std; using namespace atcoder; using mint = modint998244353; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector c(n), d(n); for (int i = 0; i < n; i++) { cin >> c[i]; } for (int i = 0; i < n; i++) { cin >> d[i]; } vector> dp(k + 1, {-1, 0}); dp[0] = {0, 1}; for (int i = 1; i <= k; i++) { for (int j = 0; j < n; j++) { if (i >= c[j] && dp[i - c[j]].first != -1) { auto [sd, cnt] = dp[i - c[j]]; sd += d[j]; if (sd > dp[i].first) { dp[i] = {sd, cnt}; } else if (sd == dp[i].first) { dp[i].second += cnt; } } } } for (int i = k; i >= 0; i--) { if (dp[i].first != -1) { return cout << dp[i].first << '\n' << dp[i].second.val(), 0; } } }