#include<iostream>
#include<vector>
using namespace std;
struct point{
int x;
int y;
};
int main()
{
long int n,L,S;
cin>>n>>L>>S;
int city[n][2];//n棵树
vector<point> map;//藏宝图
for(int i=0;i<n;i++)
{
cin>>city[i][0]>>city[i][1];
}
int tree;
for(int i=S;i>-1;i--)
{
for(int j=0;j<S+1;j++)
{
cin>>tree;
if(tree==1)
{
point p;
p.x=i;
p.y=j;
map.push_back(p);
}
}
}
int len=map.size();
int sum=0;
for(int pass=0;pass<n;pass++)//从city上找map
{
int i=city[pass][0];
int j=city[pass][1];
int l,num=0;
for(l=0;l<n;l++)
{
if(city[l][0]>city[pass][0]-1&&city[l][1]>city[pass][1]-1)//以此为左下角的同等大小块里有几棵树
{
if((city[l][0]<city[pass][0]+S+1)&&(city[l][1]<city[pass][1]+S+1)&&(city[pass][1]+S<L+1)&&(city[pass][0]+S<L+1))
num++;
}
}
if(num==len)
{
int k;
for(k=0;k<len;k++) //按藏宝图里的树来找
{
for(l=0;l<n;l++)
{
if((city[l][0]==map[k].x+i)&&(city[l][1]==map[k].y+j))
break;
}
if(l==n)//一旦某棵树没找到这里就不符合条件
break;
}
if(k==len)//找全了
{
sum++;
//cout<<i<<" "<<j<<endl;
}
}
}
cout<<sum<<endl;
return 0;
}