问题描述
暑假要到了。可惜由于种种原因,小 P 原本的出游计划取消。失望的小 P 只能留在西西艾弗岛上度过一个略显单调的假期……直到……某天,小 P 获得了一张神秘的藏宝图。
西西艾弗岛上种有 n 棵树,这些树的位置记录在一张绿化图上。简单地说,绿化图可以视作一个大小为 (L+1)×(L+1) 的 01 矩阵 A,地图左下角(坐标 (0,0))和右上角(坐标 (L,L))分别对应 A[0][0] 和 A[L][L]。其中 A[i][j]=1 表示坐标 (i,j) 处种有一棵树,A[i][j]=0 则表示没有树。矩阵 A 中有且仅有的 n 个 1 展示了西西艾弗岛上 n 棵树的位置。
传说宝藏就埋在某棵树下。顿顿从绿化图 A 中剪下一小块,制作成藏宝图 B。藏宝图可以看作大小为 (S+1)×(S+1) 的 01 矩阵 B(S 远小于 L),对应着 A 中的某一部分。
若存在坐标 (x,y)(0≤x,y≤L−S)使得对任意 (i,j)(0≤i,j≤S)都有
A[x+i][y+j]=B[i][j],
则称藏宝图 B 对应绿化图 A 中左下角为 (x,y)、右上角为 (x+S,y+S) 的区域。由于藏宝图只描绘很小范围,此类符合条件的坐标 (x,y) 可能存在多个。
请结合绿化图中 n 棵树的位置以及小 P 手中的藏宝图,判断绿化图中有多少处坐标可以与藏宝图左下角对应(特别地,藏宝图左下角一定是一棵树,即 A[x][y]=B[0][0]=1,表示宝藏可能埋藏的位置)。
输入格式
第一行包含三个正整数 n,L,S,分别表示树的棵数、绿化图和藏宝图的大小。
接下来 n 行,每行包含两个整数 x 和 y(0≤x,y≤L),表示一棵树的坐标。输入中只给出这 n 棵树的位置(坐标不会重复)。
最后 (S+1) 行输入藏宝图 B,第 i 行(0≤i≤S)包含 (S+1) 个 0 或 1,表示
B[S−i][0] B[S−i][1] … B[S−i][S].
也就是说,最先输入的是 B[S][0]…B[S][S](藏宝图的顶行),最后输入的是 B[0][0]…B[0][S](藏宝图的底行)。
输出格式
输出一个整数,表示绿化图中有多少处坐标 (x,y)(满足 0≤x,y≤L−S)可以与藏宝图左下角对应(即满足对所有 0≤i,j≤S 有 A[x+i][y+j]=B[i][j] 且 B[0][0]=1)。
输入样例 1
5 100 2
0 0
1 1
2 2
3 3
4 4
0 0 1
0 1 0
1 0 0
输出样例 1
3
输入样例 2
5 4 2
0 0
1 1
2 2
3 3
4 4
0 0 0
0 1 0
1 0 0
输出样例 2
0
说明
样例 1 解释:
绿化图上 (0,0),(1,1),(2,2) 三处均可能埋有宝藏。
样例 2 解释:
若将藏宝图左下角与绿化图 (3,3) 处对应,则藏宝图右上角会超出绿化图边界,不计入;因此没有匹配位置。
数据范围
- 40% 的测试数据满足:L≤50。
- 70% 的测试数据满足:L≤2000。
- 全部测试数据满足:n≤1000、L≤109 且 S≤50。