import java.util.*;
public class 蓝桥杯模拟赛4 {
static int n,m,t,k; //t表示水管的数量,k表示总放水时间
static int[][] arr; //arr用来画地图,为0表示是空地,为1表示有水了
static boolean[][] vis; //记忆化搜索,为false表示没走过,为true表示走过
static int[] x= {-1,1,0,0}; //x,y表方向
static int[] y= {0,0,-1,1};
public static void dfs(int i,int j,int cur) {
if(cur==k) { //时间到
return ;
}
for(int a=0;a<4;a++) { //遍历4个方向
int newx=i+x[a];
int newy=j+y[a];
if(newx>=0&&newx<n&&newy>=0&&newy<m&&vis[newx][newy]==false) {
vis[newx][newy]=true; //将其标为走过
arr[newx][newy]=1; //将其标为1表示有水了
dfs(newx,newy,cur+1); //进入下一层,cur+1表示时间加1
vis[newx][newy]=false; //回溯
}
}
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
n=input.nextInt();
m=input.nextInt();
t=input.nextInt();
arr=new int[n][m];
vis=new boolean[n][m];
//专门开个tem数组用来记录水管的位置,最好不要同时用arr记录水管位置,不然很麻烦
boolean[][] tem=new boolean[n][m];
for(int i=0;i<t;i++) {
int a=input.nextInt();
int b=input.nextInt();
tem[a-1][b-1]=true; //将此处标为true表示有水管
}
k=input.nextInt();
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(tem[i][j]==true) { //找到水管了
vis[i][j]=true; //将初始位置标为走过
arr[i][j]=1; //初始位置默认有水
dfs(i,j,0);
}
}
}
int ans=0;
for(int i=0;i<n;i++) { //遍历全图找出所以有水的位置ans++
for(int j=0;j<m;j++) {
if(arr[i][j]==1) {
ans++;
}
}
}
System.out.println(ans); //输出有水方格的数目
for(int i=0;i<n;i++) { //打印出灌溉完成后的地图
for(int j=0;j<m;j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}