#include <bits/stdc++.h>
using namespace std;
int n, K, b[40004], a[40004];
int Wl, Wl2, w[40004], lg[40004], inv[40004] = {1, 1};
int Pow(int b, int k) {
  int r = 1;
  for (; k; k >>= 1, b = 1ll * b * b % 998244353)
    if (k & 1) r = 1ll * r * b % 998244353;
  return r;
}
void init(int n) {
  for (Wl = 1; n >= Wl << 1; Wl <<= 1)
    ;
  int pw = Pow(3, (998244353 - 1) / (Wl2 = Wl << 1));
  w[Wl] = 1;
  for (int i = (Wl + 1), LIM = (Wl2 - 1); i <= LIM; i++)
    w[i] = 1ll * w[i - 1] * pw % 998244353;
  for (int i = (Wl - 1), LIM = (1); i >= LIM; i--) w[i] = w[i << 1];
  for (int i = (2), LIM = (Wl2); i <= LIM; i++)
    inv[i] = 1ll * (998244353 - 998244353 / i) * inv[998244353 % i] % 998244353,
    lg[i] = lg[i >> 1] + 1;
}
void NTT(int *A, int n, int tp) {
  static int r[40004];
  static unsigned long long a[40004];
  if (tp ^ 1) reverse(A + 1, A + n);
  for (int i = (0), LIM = (n - 1); i <= LIM; i++)
    r[i] = r[i >> 1] >> 1 | (i & 1) << (lg[n] - 1),
    a[i] = (A[r[i]] += A[r[i]] >> 31 & 998244353);
  for (int L = 1; L < n; L <<= 1)
    for (int s = 0, L2 = L << 1; s < n; s += L2)
      for (int k = s, x = L, t; k < s + L; k++, x++)
        t = w[x] * a[k + L] % 998244353, a[k + L] = a[k] - t + 998244353,
        a[k] += t;
  for (int i = (0), LIM = (n - 1); i <= LIM; i++) A[i] = a[i] % 998244353;
  if (tp ^ 1)
    for (int i = (0), LIM = (n - 1); i <= LIM; i++)
      A[i] = 1ll * A[i] * inv[n] % 998244353;
}
void Mul(int *A, int *B, int *C, int n, int m) {
  static int st[2][40004];
  int L = 1 << lg[n + m] + 1;
  for (int i = (0), LIM = (L - 1); i <= LIM; i++)
    st[0][i] = i <= n ? A[i] : 0, st[1][i] = i <= m ? B[i] : 0;
  NTT(st[0], L, 1), NTT(st[1], L, 1);
  for (int i = (0), LIM = (L - 1); i <= LIM; i++)
    C[i] = 1ll * st[0][i] * st[1][i] % 998244353;
  NTT(C, L, -1);
}
int *f[40004 << 2];
void Build(int u, int l, int r) {
  f[u] = new int[1 << lg[r - l + 1] + 1];
  if (l == r) return;
  int m = l + r >> 1;
  Build(u << 1, l, m), Build(u << 1 | 1, m + 1, r);
}
void Sol(int u, int l, int r) {
  memset(f[u], 0, 4 * (1 << lg[r - l + 1] + 1));
  if (l == r) return (void)(f[u][0] = 1, f[u][1] = b[l]);
  int m = l + r >> 1;
  Sol(u << 1, l, m), Sol(u << 1 | 1, m + 1, r);
  Mul(f[u << 1], f[u << 1 | 1], f[u], m - l + 1, r - m);
}
int main() {
  scanf("%d%d", &n, &K);
  for (int i = (1), LIM = (n); i <= LIM; i++) scanf("%d", &a[i]);
  init(n);
  int Q;
  scanf("%d", &Q);
  Build(1, 1, n);
  for (int op, q, i, d, l, r; Q--;) {
    scanf("%d", &op);
    memcpy(b, a, sizeof b);
    if (op == 1) {
      scanf("%d%d%d", &q, &i, &d);
      b[i] = d;
    } else {
      scanf("%d%d%d%d", &q, &l, &r, &d);
      for (int j = l; j <= r; j++) b[j] = (b[j] + d) % 998244353;
    }
    for (int i = (1), LIM = (n); i <= LIM; i++) b[i] = (q - b[i]) % 998244353;
    Sol(1, 1, n);
    printf("%d\n", (f[1][K] + 998244353) % 998244353);
  }
}
