MOD = 998244353 N, W = map(int, input().split()) A = [] V = 0 for i in range(N): v, w = map(int, input().split()) if w < 0: V += v W -= w A.append((-v, -w)) else: A.append((v, w)) maxV = V dp = [None] * (W + 1) dp[0] = (V, 1) for i in range(N): for j in range(W, A[i][1] - 1, -1): if A[i][0] <= 0: continue if dp[j - A[i][1]] is not None: if dp[j] is None: dp[j] = (dp[j - A[i][1]][0] + A[i][0], dp[j - A[i][1]][1]) elif dp[j - A[i][1]][0] + A[i][0] > dp[j][0]: dp[j] = (dp[j - A[i][1]][0] + A[i][0], dp[j - A[i][1]][1]) elif dp[j - A[i][1]][0] + A[i][0] == dp[j][0]: dp[j] = (dp[j][0], (dp[j][1] + dp[j - A[i][1]][1]) % MOD) ans = 0 for j in range(W + 1): if dp[j] is None: continue if dp[j][0] > maxV: maxV = dp[j][0] ans = dp[j][1] elif dp[j][0] == maxV: ans = (ans + dp[j][1]) % MOD print(maxV, ans)