#pragma GCC optimize ("Ofast") #pragma GCC optimize ("unroll-loops") #pragma GCC target ("avx") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using Int = long long; template ostream &operator<<(ostream &os, const pair &a) { return os << "(" << a.first << ", " << a.second << ")"; }; template void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; } template void chmin(T &t, const T &f) { if (t > f) t = f; } template void chmax(T &t, const T &f) { if (t < f) t = f; } int N, K; int A[20010]; int Q; int X[20010], V[20010]; int a[20010]; constexpr int MO = 998244353; int dp[20010]; void init() { fill(dp, dp + K + 1, 0); dp[0] = 1; } void add(int x) { if (x != 0) { for (int j = K; j >= x; --j) { if ((dp[j] += dp[j - x]) >= MO) { dp[j] -= MO; } } } } void remove(int x) { if (x != 0) { for (int j = x; j <= K; ++j) { if ((dp[j] -= dp[j - x]) < 0) { dp[j] += MO; } } } } int get() { return (dp[K] != 0) ? 1 : 0; } int main() { for (; ~scanf("%d%d", &N, &K); ) { for (int i = 0; i < N; ++i) { scanf("%d", &A[i]); } scanf("%d", &Q); for (int q = 0; q < Q; ++q) { scanf("%d%d", &X[q], &V[q]); --X[q]; } init(); for (int i = 0; i < N; ++i) { add(A[i]); } copy(A, A + N, a); for (int q = 0; q < Q; ++q) { remove(a[X[q]]); a[X[q]] = V[q]; add(a[X[q]]); // pv(a,a+N); // pv(dp,dp+K+1); printf("%d\n", get()); } } return 0; }