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 <iostream>
#include <cstdio>
#include <vector>
#include <list>
#include <algorithm>
#include <cmath>
#include <stack>
#include <set>
using namespace std;

#define REP(i,n) for(int (i)=0; (i)<(n); (i)++)
#define FOR(i,a,b) for(int (i)=(a); (i)<(b); (i)++)
#define PUSH(n,v) for(int i=0; i<(n); i++) {int j; cin >> j; v.push_back(j);}
#define ALL(v) v.begin(), v.end()

vector<vector<int>> vv;

void ink(int x, int y) {
    if (x >= 0 && x < 10 && y >= 0 && y < 10) {
        vv[x][y]++;
    }
}

void big(int x, int y) {
    ink(x-2,y);
    ink(x-1,y);
    ink(x,y);
    ink(x+1,y);
    ink(x+2,y);
    ink(x-1,y-1);
    ink(x,y-1);
    ink(x+1,y-1);
    ink(x-1,y+1);
    ink(x,y+1);
    ink(x+1,y+1);
    ink(x,y-2);
    ink(x,y+2);
}

void mid(int x, int y) {
    ink(x-2,y);
    ink(x-1,y);
    ink(x,y);
    ink(x+1,y);
    ink(x+2,y);
    ink(x-1,y-1);
    ink(x,y-1);
    ink(x+1,y-1);
    ink(x-1,y+1);
    ink(x,y+1);
}

void small(int x, int y) {
    ink(x-1,y);
    ink(x,y);
    ink(x+1,y);
    ink(x,y-1);
    ink(x,y+1);
}

int countNotBlank() {
    int cnt = 0;
    REP(i,10) REP(j,10) if (vv[i][j] > 0) cnt++;
    return cnt;
}

int getThickest() {
    int t = 0;
    REP(i,10) REP(j,10) if (vv[i][j] > t) t = vv[i][j];
    return t;
}

int main() {
    REP(i,10) {
        vector<int> v(10,0);
        vv.push_back(v);
    }
    
    int x, y, s;
    while(scanf("%d,%d,%d"), &x, &y, &s) {
        switch (s) {
            case 1:
                small(x,y);
                break;
            case 2:
                mid(x,y);
                break;
            case 3:
                big(x,y);
                break;
                
            default:
                break;
        }
    }
    
    cout << countNotBlank() << endl << getThickest() << endl;
    
    return 0;
}

C++: #include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int dx[12] = { 1, 0, -1, 0, 1, -1, 1, -1, 2, 0, -2, 0 };
	int dy[12] = { 0, 1, 0, -1, 1, 1, -1, -1, 0, 2, 0, -2 };
	int map[11][11] = { 0 };
	int cnt = 100;
	int x, y, size;
	char s, d;
	int ma = 0;
	int c = 0;

	while (cin >> x >> s >> y >> d >> size){
		
		if (size == 1){
			map[y][x]++;
			for (int i = 1; i <= 4; i++){
				
				int xx = dx[i] + x;
				int yy = dy[i] + y;
				if (xx < 0 || xx >= 10 || yy < 0 || yy >= 10) continue;
					map[yy][xx]++;
				
			}
		}

		else if (size == 2){
			map[y][x]++;
			for (int i = 1; i <= 8; i++){
				int xx = dx[i] + x;
				int yy = dy[i] + y;
				if (xx < 0 || xx >= 10 || yy < 0 || yy >= 10) continue;
					map[yy][xx]++;
			}
		}

		else if(size==3) {
			map[y][x]++;
			for (int i = 1; i <= 12; i++){
				int xx = dx[i] + x;
				int yy = dy[i] + y;
				if (xx < 0 || xx >= 10 || yy < 0 || yy >= 10) continue;
					map[yy][xx]++;
			}
		}
		/*for (int i = 1; i <= 10; i++){
			for (int i2 = 1; i2 <= 10; i2++){
				cout << map[i][i2] << " ";
			}cout << endl;
		}*/
	}

	for (int i = 1; i <= 10; i++){
		for (int i2 = 1; i2 <= 10; i2++){
			if (map[i][i2] != 0){
				cnt--;
			}
			ma = max(ma, map[i][i2]);
		}
	}
	
	cout << cnt << endl;
	cout << ma << endl;
}

C++: #include<iostream>
#include<vector>
#include<string>
using namespace std;
int parse(string a) {
	int s = 0;
	for (int b = 0; b < a.length(); b++) {
		s *= 10;
		s += a[b] - 48;
	}
	return s;
}
vector<int>split(string a) {
	vector<int>s;
	string b = "";
	for (int c = 0; c < a.length(); c++) {
		if (a[c] == ',') { s.push_back(parse(b)); b = ""; }
		else b += a[c];
	}
	s.push_back(parse(b));
	return s;
}
int main() {
	vector<vector<int>>masu(10,vector<int>(10));
	int xp[4]{ 1,-1,1,-1 };
	int yp[4]{ 1,1,-1,-1 };
	int xq[12]{ -2,-1,-1,-1,0,0,0,0,1,1,1,2 };
	int yq[12]{ 0,-1,0,1,-2,-1,1,2,-1,0,1,0 };
	string a;
	while (cin >> a) {
		vector<int>b;
		b = split(a);
		if (b[2] == 1){
			for (int l = 0; l < 4; l++) {
				if (b[0] + xp[l] < 10 && b[0] + xp[l]>0 && b[1] + yp[l] < 10 && b[1] + yp[l] < 10)masu[b[0] + xp[l]][b[1] + yp[l]]++;
		}
		}
		else if (b[2] == 2) {
			for (int l = b[0] - 1; l < b[0] + 2; l++) {
				for (int r = b[1] - 1; r < b[1] + 2; r++) {
					if (l < 10 && l>-1 && r < 10 && r>-1) masu[l][r]++;
				}
			}
		}
		else {
			for (int l = 0; l < 12; l++) {
				if (b[0] + xq[l] < 10 && b[0] + xq[l]>0 && b[1] + yq[l] < 10 && b[1] + yq[l] < 10)masu[b[0] + xq[l]][b[1] + yq[l]]++;
			}
		}
	}
	int zero, n;
	zero = n = 0;
	for (auto j : masu) {
		for (int i : j) {
			if (i==0) zero++;
			else if (i > n)n = i;
		}
	}
	cout << zero << endl << n << endl;
}

C++: #include<stdio.h>

int table[14][14];

int main(){
	int a,b,c;
	while(~scanf("%d,%d,%d",&a,&b,&c)){
		a+=2;
		b+=2;
		switch(c){
			case 3:
				table[a-2][b]++;
				table[a+2][b]++;
				table[a][b-2]++;
				table[a][b+2]++;
			case 2:
				table[a+1][b+1]++;
				table[a-1][b-1]++;
				table[a+1][b-1]++;
				table[a-1][b+1]++;
			case 1:
				table[a][b+1]++;
				table[a][b-1]++;
				table[a-1][b]++;
				table[a+1][b]++;
				table[a][b]++;
		}
	}
	int max=0;
	int ans=0;
	for(int i=2;i<12;i++){
		for(int j=2;j<12;j++){
			if(table[i][j]>0)ans++;
			if(table[i][j]>max)max=table[i][j];
		}
	}
	printf("%d\n%d\n",100-ans,max);
}