Go: package main

import (
        "fmt"
)

var paper [10][10]int

func main() {
        var x, y, s int
        for {
                _, err := fmt.Scanf("%d,%d,%d", &x, &y, &s)
                if err != nil {
                        break
                }

                fill(x, y, s)
        }
        var d, z int
        for i := 0; i < 10; i++ {
                for j := 0; j < 10; j++ {
                        if paper[i][j] == 0 {
                                z += 1
                        }
                        if paper[i][j] > d {
                                d += 1
                        }
                }
        }
        fmt.Printf("%d\n%d\n", z, d)
}

func fill(x int, y int, s int) {
        paper[x][y] += 1
        if x > 0 {
                paper[x-1][y] += 1
        }
        if x < 9 {
                paper[x+1][y] += 1
        }
        if y > 0 {
                paper[x][y-1] += 1
        }
        if y < 9 {
                paper[x][y+1] += 1
        }

        if s >= 2 {
                if x > 0 && y > 0 {
                        paper[x-1][y-1] += 1
                }
                if x > 0 && y < 9 {
                        paper[x-1][y+1] += 1
                }
                if x < 9 && y > 0 {
                        paper[x+1][y-1] += 1
                }
                if x < 9 && y < 9 {
                        paper[x+1][y+1] += 1
                }
        }

        if s > 2 {
                if x > 1 {
                        paper[x-2][y] += 1
                }
                if x < 8 {
                        paper[x+2][y] += 1
                }
                if y > 1 {
                        paper[x][y-2] += 1
                }
                if y < 8 {
                        paper[x][y+2] += 1
                }
        }
}

C++: #include <bits/stdc++.h>
using namespace std;

#define rep(i,a,n) for(int i=a; i<n; i++)
#define repr(i,a,n) for(int i=a; i>=n; i--)
#define pb(a) push_back(a)
#define fr first
#define sc second
#define INF 999999999

#define X real()
#define Y imag()
#define EPS (1e-10)
#define EQ(a,b) (abs((a) - (b)) < EPS)
#define EQV(a,b) ( EQ((a).X, (b).X) && EQ((a).Y, (b).Y) )
#define LE(n, m) ((n) < (m) + EPS)
#define GE(n, m) ((n) + EPS > (m))

typedef vector<int> VI;
typedef vector<VI> MAT;
typedef pair<int, int> pii;
typedef long long int ll;

typedef complex<double> P;
typedef pair<P, P> L;
typedef pair<P, double> C;

int const MOD = 1000000007;
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int dx[8] = {1, 0, -1, 0, 1, -1, 1, -1};

int main() {
    int a[10][10];
    memset(a, 0, sizeof(a));
    int x,y,s;
    while(scanf("%d,%d,%d", &x, &y, &s) + 1) {
        // if(x == 0 && y == 0 && s == 0) break;
        if(s == 1) {
            if(x + 1 <= 9) a[x + 1][y]++;
            if(x - 1 >= 0) a[x - 1][y]++;
            if(y + 1 <= 9) a[x][y + 1]++;
            if(y - 1 >= 0) a[x][y - 1]++;
        }
        else if(s == 2) {
            rep(i,0,8) {
                if(x + dx[i] < 0) continue;
                else if(x + dx[i] > 9) continue;
                else if(y + dy[i] < 0) continue;
                else if(y + dy[i] > 9) continue;
                else a[x + dx[i]][y + dy[i]]++;
            }
        }
        else {
            rep(i,0,8) {
                if(x + dx[i] < 0) continue;
                else if(x + dx[i] > 9) continue;
                else if(y + dy[i] < 0) continue;
                else if(y + dy[i] > 9) continue;
                else a[x + dx[i]][y + dy[i]]++;
            }
            if(x + 2 <= 9) a[x + 2][y]++;
            if(x - 2 >= 0) a[x - 2][y]++;
            if(y + 2 <= 9) a[x][y + 2]++;
            if(y - 2 >= 0) a[x][y - 2]++;
        }
    }

    int m_point = 0;
    int max_num = 0;
    rep(i,0,10) rep(j,0,10) {
        if(a[i][j] == 0) m_point++;
        max_num = max(max_num, a[i][j]);
    }
    cout << m_point << endl;
    cout << max_num << endl;

    return 0;
}

C++: #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;

int paper[10][10];

bool onPaper(int x,int y){
	return 0<=x&&x<10&&0<=y&&y<10;
}
void small(int x,int y){
	for(int i=-1;i<=1;i++)
		for(int j=-1;j<=1;j++)
			if(onPaper(x+i,y+j) && abs(i)+abs(j) <= 1)
				paper[x+i][y+j]++;
}
void medium(int x,int y){
	for(int i=-1;i<=1;i++)
		for(int j=-1;j<=1;j++)
			if(onPaper(x+i,y+j) && abs(i)<=1 && abs(j)<=1)
				paper[x+i][y+j]++;
}
void large(int x,int y){
	for(int i=-2;i<=2;i++)
		for(int j=-2;j<=2;j++)
			if(onPaper(x+i,y+j) && abs(i)+abs(j) <= 2)
				paper[x+i][y+j]++;
}
int main(){
	int x,y,size;
	while(scanf("%d,%d,%d",&x,&y,&size)!=EOF){
		if(size==1)small(x,y);
		else if(size==2)medium(x,y);
		else large(x,y);
	}
	int n=0,depth=0;
	for(x=0;x<10;x++){
		for(y=0;y<10;y++){
			if(paper[x][y]==0)n++;
			depth = max(depth,paper[x][y]);
		}
	}
	cout<<n<<endl;
	cout<<depth<<endl;
	return 0;
}

C++: #include<iostream>
#include<utility>

using namespace std;

bool inPaper(int x, int y) {
	return x >= 0 && x < 10 && y >= 0 && y < 10;
}

int main() {
	const pair<int, int> small[] = {
		        {0, -1},
		{-1, 0},{0, 0},{1, 0},
		        {0, 1}
	};
	const pair<int, int> medium[] = {
		{-1, -1}, {0, -1}, {1, -1},
		{-1,  0}, {0, 0},  {1,  0},
		{-1,  1}, {0, 1},  {1,  1}
	};
	const pair<int, int> large[] = {
            	   {0, -2},
		{ -1, -1 },{ 0, -1 },{ 1, -1 },
		{ -2, 0 }, { -1,  0 },{ 0, 0 },{ 1,  0 },{ 2, 0 },
		{ -1,  1 },{ 0, 1 },{ 1,  1 },
				   { 0, 2 },
	};

	int paper[10][10] = {};

	while (true) {
		int x, y, size;
		
		cin >> x;
		cin.ignore();
		cin >> y;
		cin.ignore();
		cin >> size;
		if (cin.eof()) {
			break;
		}

		const pair<int, int>* it_begin;
		const pair<int, int>* it_end;
		switch (size)
		{
		case 1:
			it_begin = begin(small);
			it_end = end(small);
			break;
		case 2:
			it_begin = begin(medium);
			it_end = end(medium);
			break;
		case 3:
			it_begin = begin(large);
			it_end = end(large);
			break;
		default:
			break;
		}
		for (auto it = it_begin; it != it_end; ++it) {
			int x2 = x + it->first, y2 = y + it->second;
			if (inPaper(x2, y2)) {
				++paper[x2][y2];
			}
		}
	}
	int zero_count = 0;
	for (auto& a : paper) {
		for (auto& b : a) {
			if (b == 0) {
				++zero_count;
			}
		}
	}
	cout << zero_count << endl;

	int maximum = 0;
	for (auto& a : paper) {
		for (auto& b : a) {
			if (b > maximum) {
				maximum = b;
			}
		}
	}
	cout << maximum << endl;
	return 0;
}