#include <bits/stdc++.h>
using namespace std;
const int MAXN = 33333;
const int mod = 998244353, G = 3;
int n, k, T, a[MAXN], W, rev[MAXN], gen[MAXN];
vector<int> vec[MAXN];
inline int qpow(int a, int b) {
  int re = 1;
  for (; b; b >>= 1, a = 1ll * a * a % mod)
    if (b & 1) re = 1ll * re * a % mod;
  return re;
}
inline int pls(int x, int y) { return x + y >= mod ? x + y - mod : x + y; }
inline void add(int &x, int y) { x = x + y >= mod ? x + y - mod : x + y; }
void NTT(vector<int> &arr, int len, int flg) {
  for (int i = 0; i < len; ++i)
    if (i < rev[i]) swap(arr[i], arr[rev[i]]);
  for (int v, i = 2, B = W >> 1; i <= len; i <<= 1, B >>= 1)
    for (int j = 0; j < len; j += i)
      for (int k = j, x = 0; k < j + i / 2; ++k, x += B)
        arr[k + i / 2] = pls(
            arr[k],
            mod - (v = 1ll * arr[k + i / 2] * gen[flg == 1 ? x : W - x] % mod)),
                    add(arr[k], v);
  if (flg == -1) {
    int iv = qpow(len, mod - 2);
    for (int i = 0; i < len; ++i) arr[i] = 1ll * arr[i] * iv % mod;
  }
}
vector<int> solve(int l, int r) {
  if (l == r) return vec[l];
  int mid = (l + r) >> 1;
  vector<int> L = solve(l, mid), R = solve(mid + 1, r);
  int len = 1;
  while (len <= r - l + 1) len <<= 1;
  for (int i = 1; i < len; ++i)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) * (len >> 1));
  L.resize(len), R.resize(len);
  NTT(L, len, 1), NTT(R, len, 1);
  for (int i = 0; i < len; ++i) L[i] = 1ll * L[i] * R[i] % mod;
  NTT(L, len, -1);
  L.resize(r - l + 2);
  return L;
}
int main() {
  scanf("%d%d", &n, &k);
  for (W = 1; W <= n; W <<= 1)
    ;
  gen[0] = 1, gen[1] = qpow(G, (mod - 1) / W);
  for (int i = 2; i <= W; ++i) gen[i] = 1ll * gen[i - 1] * gen[1] % mod;
  for (int i = 1; i <= n; ++i)
    scanf("%d", &a[i]), vec[i].resize(2), vec[i][0] = 1;
  int op, q, x, y, d;
  for (scanf("%d", &T); T--;) {
    scanf("%d%d%d", &op, &q, &x);
    if (op == 2)
      scanf("%d", &y);
    else
      y = x;
    scanf("%d", &d);
    for (int i = 1; i <= n; ++i)
      vec[i][1] =
          ((q - ((x <= i && i <= y) ? (op == 1 ? d : a[i] + d) : a[i])) % mod +
           mod) %
          mod;
    vector<int> ans = solve(1, n);
    printf("%d\n", ans[k]);
  }
}
