// Olimpíadas Nacionais de Informática 2020 // Treino #01: Problema E - Pinturas // Transcrição da solução oficial (convertida de C++ para Java) import java.util.*; class e { static final int MAXN = 100005; static final int MAXC = 21; static final int mod = 10007; static int n, c, q; static int[] a = new int[MAXN]; static int[] b = new int[MAXN]; static int[][] T = new int[2 * MAXN][MAXC]; static void update(int x) { for (int i = 0; i <= c; ++i) T[x][i] = 0; for (int i = 0; i <= c; ++i) for (int j = 0; j <= c; ++j) T[x][Math.min(i + j, c)] += (T[x * 2][i] * T[x * 2 + 1][j]) % mod; for (int i = 0; i <= c; ++i) T[x][i] %= mod; } static void change(int x) { x += n; Arrays.fill(T[x], 0); T[x][1] = a[x - n] % mod; T[x][0] = b[x - n] % mod; for (x /= 2; x > 0; x /= 2) update(x); } public static void main(String[] args) { Scanner in = new Scanner(System.in); n = in.nextInt(); c = in.nextInt(); for (int i = 0; i < n; ++i) a[i] = in.nextInt(); for (int i = 0; i < n; ++i) b[i] = in.nextInt();; for (int i = 0; i < n; ++i) { T[i + n][0] = b[i] % mod; T[i + n][1] = a[i] % mod; } for (int i = n-1; i >= 1; --i) update(i); q = in.nextInt(); for (int i = 0; i < q; ++i) { int p = in.nextInt(); --p; a[p] = in.nextInt(); b[p] = in.nextInt(); change(p); System.out.println(T[1][c]); } } }