using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, k) = (c[0], c[1]); c = NList; var d = NList; var dp = Enumerable.Repeat(int.MinValue, k + 1).ToArray(); dp[0] = 0; for (var i = 0; i < k; ++i) for (var j = 0; j < n; ++j) { if (i + c[j] <= k) dp[i + c[j]] = Math.Max(dp[i + c[j]], dp[i] + d[j]); } var max = dp.Max(); var rev = new long[k + 1]; for (var i = 0; i < rev.Length; ++i) if (dp[i] == max) rev[i] = 1; var mod = 998_244_353; for (var i = k; i > 0; --i) for (var j = 0; j < n; ++j) { if (i - c[j] >= 0 && dp[i - c[j]] + d[j] == dp[i]) rev[i - c[j]] = (rev[i - c[j]] + rev[i]) % mod; } WriteLine(max); WriteLine(rev[0]); } }