import java.util.*;

public class Main {
    
    final static int N = 1010;
    static int[][] map = new int[N][N];
    static int[][] w = new int[N][N];
    static int n, m, q;
    static final int mod = 100007;
    static int[] dx = {1, 0, -1, 0}, dy = {0, -1, 0, 1};
    static int[][] cache = new int[N][N];

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt(); m = in.nextInt();

        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= m; j ++){
                map[i][j] = in.nextInt();
            }

        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= m; j ++){
                w[i][j] = in.nextInt();
            }

        q = in.nextInt();
        while(q -- > 0){
            int x = in.nextInt();
            int y = in.nextInt();
            System.out.println(process(x, y) % mod);
        }
    }

    private static int process(int x, int y){

        if(cache[x][y] != 0) return cache[x][y];
        cache[x][y] = 1;

        for(int k = 0; k < 4; k ++){
            int i = x + dx[k], j = y + dy[k];
            if(i <= 0 || i > n || j <= 0 || j > m) continue;
            if(map[i][j] + w[i][j] <= map[x][y]){
                cache[x][y] += process(i, j);
            }
        }
        return cache[x][y];
    }
}