// 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]);
	}
    }
}
