#CF559C. 杰拉德与巨型象棋

杰拉德与巨型象棋

C. 杰拉德与巨型象棋

每个测试的时间限制:2 秒
内存限制:256 兆字节

巨型象棋在杰拉尔德地区相当常见。我们不深入探讨游戏规则,只说明游戏在一个 h×wh \times w 的棋盘上进行,棋盘被涂成两种颜色,但不像普通国际象棋那样。棋盘上几乎所有的格子都是白色的,只有一些格子是黑色的。
当前杰拉德正在与他的朋友波拉德进行一场巨型象棋的终局。杰拉德几乎已经赢了,他唯一需要做的就是将他的棋子从棋盘左上角(目前所在位置)走到右下角。杰拉德对胜利如此自信,以至于他开始好奇:有多少种方式可以让他获胜?

杰拉德剩下的这枚棋子只能走两种走法:向下移动一格,或者向右移动一格。此外,它不能走入黑色格子,否则杰拉德就会输。棋盘上没有其他棋子或兵种,因此根据巨型象棋的规则,杰拉德移动他的棋子直到游戏结束,而波拉德只是旁观这个过程。

输入
第一行包含三个整数:hhwwnn —— 棋盘的两个边长以及黑色格子的数量(1h,w1051 \le h, w \le 10^51n20001 \le n \le 2000)。
接下来 nn 行描述黑色格子。第 ii 行包含两个数字 rir_icic_i1rih1 \le r_i \le h1ciw1 \le c_i \le w)—— 该黑色格子的行号和列号。
数据保证左上角和右下角格子是白色的,并且所描述的所有格子互不相同。

输出
输出一行,表示杰拉德的棋子从左上角走到右下角的不同方式的数量,对 109+710^9 + 7 取模后的结果。


样例输入 1

3 4 2
2 2
2 3

样例输出 1

2

样例输入 2

100 100 3
15 16
16 15
99 88

样例输出 2

545732279