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