while true
    n, m, t, p = gets.chomp.split.map(&:to_i)
    break if [n, m, t, p] == [0, 0, 0, 0]

    map = Array.new(m){Array.new(n, 1)}
    t.times{
        map2 = []
        map.each{|m| map2 << m.dup}

        d, i = gets.chomp.split.map(&:to_i)
        case d
        when 1
            map = Array.new(m){Array.new([i, n - i].max, 0)}
            x2 = 0
            i.upto(n-1){|x|
                0.upto(m-1){|y| map[y][x2] += map2[y][x]}
                x2 += 1
            }
            x2 = 0
            (i-1).downto(0){|x|
                0.upto(m-1){|y| map[y][x2] += map2[y][x]}
                x2 += 1
            }
            n = [i, n - i].max
        when 2
            map = Array.new([m-i, i].max){Array.new(n, 0)}
            y2 = [m-i, i].max - 1
            (m-i-1).downto(0){|y|
                0.upto(n-1){|x| map[y2][x] += map2[y][x]}
                y2 -= 1
            }
            y2 = [m-i, i].max - 1
            (m-i).upto(m-1){|y|
                0.upto(n-1){|x| map[y2][x] += map2[y][x]}
                y2 -= 1
            }
            m = [m-i, i].max
        end
    }

    p.times{
        x, y = gets.chomp.split.map(&:to_i)
        puts map[m-y-1][x]
    }
end

