#include using namespace std; using namespace atcoder; using mint = modint998244353; int main(){ int N, M, r = 600, v; cin >> N >> M; vector A(N); for(auto &&v:A)cin >> v; vector> comb(r + 1, vector(r + 1)), tb(M + 1, vector(r + 1, 1)); for(int i = 1; i <= r; i++){ comb[i][0] = comb[i][i] = 1; for(int j = 1; j < i; j++) comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j]; } for(int i = 0; i < N; i++){ cin >> v; int rem = i % M; for(int j = 0; j <= 600; j++){ tb[rem][j] *= (-v + 300 <= j && j <= A[i] + 300 ? comb[v + A[i]][j + v - 300] : 0); } } vector dp(1, 1); for(int i = 0; i < M; i++) dp = convolution(dp, tb[i]); cout << dp[300 * M].val() << '\n'; }