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