import java.util.Scanner;
public class Main {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int n = scanner.nextInt(), m = scanner.nextInt(), k = scanner.nextInt();
Position[] torchPositions = new Position[m], fluoritePositions = new Position[k];
inputPosTo(torchPositions);
inputPosTo(fluoritePositions);
Light torch = new Light(swapXY(new BlockState[][]{
{BlockState.bark, BlockState.bark, BlockState.bright, BlockState.bark, BlockState.bark},
{BlockState.bark, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bark},
{BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright},
{BlockState.bark, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bark},
{BlockState.bark, BlockState.bark, BlockState.bright, BlockState.bark, BlockState.bark}
})), fluorite = new Light(swapXY(new BlockState[][]{
{BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright},
{BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright},
{BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright},
{BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright},
{BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright, BlockState.bright}
}));
System.out.println(torch);
System.out.println(fluorite);
RectRegion rectRegion = new RectRegion(n);
for (Position torchPosition : torchPositions) {
torch.put(torchPosition, rectRegion);
}
for (Position fluoritePosition : fluoritePositions) {
fluorite.put(fluoritePosition, rectRegion);
}
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (rectRegion.map[i][j] == BlockState.bark)
count++;
}
}
System.out.println(rectRegion);
System.out.println(count);
}
static BlockState[][] swapXY(BlockState[][] old) {
final int height = old.length, width = old[0].length;
BlockState[][] New = new BlockState[width][height];
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
New[x][y] = old[y][x];
}
}
return New;
}
static void inputPosTo(Position[] positions) {
for (int i = 0; i < positions.length; i++) {
positions[i] = new Position(scanner.nextInt(), scanner.nextInt());
}
}
}
abstract class Region {
final BlockState[][] map;
final int width, height;
Region(BlockState[][] map) {
this.map = map;
width = map.length;
height = map[0].length;
}
Region(int size) {
this.width = size;
this.height = size;
map = new BlockState[size][size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
map[i][j] = BlockState.bark;
}
}
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (map[x][y] == BlockState.bright) {
builder.append('光');
} else {
builder.append('暗');
}
}
builder.append('\n');
}
return builder.toString();
}
}
class RectRegion extends Region {
final int size;
RectRegion(int size) {
super(size);
this.size = size;
}
}
class Light extends Region {
Light(BlockState[][] map) {
super(map);
}
void put(Position center, RectRegion rectRegion) {
Position leftTop = new Position(center.x - width / 2, center.y - height / 2);
for (int currentY = leftTop.y, mapY = 0, colCount = 0; colCount < height; colCount++, currentY++, mapY++) {
for (int currentX = leftTop.x, mapX = 0, rowCount = 0; rowCount < width; rowCount++, currentX++, mapX++) {
if (dotInRectRegion(new Position(currentX, currentY), rectRegion) && map[mapX][mapY] == BlockState.bright)
rectRegion.map[currentX][currentY] = BlockState.bright;
}
}
}
boolean dotInRectRegion(Position dot, RectRegion rectRegion) {
return dot.x >= 0 && dot.x < rectRegion.size && dot.y >= 0 && dot.y < rectRegion.size;
}
}
enum BlockState {
bright, bark
}
class Position {
final int x, y;
Position(int x, int y) {
this.x = x;
this.y = y;
}
}