#include #include using namespace std; using mint = atcoder::modint998244353; int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(false); 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, -1000000); vector cnt(K + 1, 0); dp[0] = 0; cnt[0] = 1; for(int i = 1; i <= K; i++) { for(int j = 0; j < N; j++) { if(i - C[j] >= 0) { if(dp[i] < dp[i - C[j]] + D[j]) { dp[i] = dp[i - C[j]] + D[j]; cnt[i] = cnt[i - C[j]]; } else if(dp[i] == dp[i - C[j]] + D[j]) { cnt[i] += cnt[i - C[j]]; } } } } int mx = *max_element(dp.begin(), dp.end()); mint ans = 0; for(int i = 0; i <= K; i++) { if(dp[i] == mx) { ans += cnt[i]; } } cout << mx << '\n'; cout << ans.val() << '\n'; return 0; }