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 <string>

using namespace std;

template<typename T, T INIT, size_t WIDTH, size_t HEIGHT>
class Field
{
	T m_data[WIDTH*HEIGHT];
	T dummy;

public:
	Field()
	{
		for(auto& i : m_data)
			i = INIT;
		dummy = INIT;
	}

	T& $(size_t x, size_t y)
	{
		if(x < 0 || WIDTH <= x || y < 0 || HEIGHT <= y)
			return dummy;

		return m_data[y * WIDTH + x];
	}
};

int main()
{
	Field<int, 0, 10, 10> field;

	string line;
	while(cin >> line)
	{
		int x, y, s;
		sscanf(line.c_str(), "%d,%d,%d", &x, &y, &s);

		switch(s)
		{
		case 3:
			field.$(x+2, y  )++;
			field.$(x-2, y  )++;
			field.$(x  , y+2)++;
			field.$(x  , y-2)++;

		case 2:
			field.$(x+1, y+1)++;
			field.$(x+1, y-1)++;
			field.$(x-1, y+1)++;
			field.$(x-1, y-1)++;

		case 1:
			field.$(x  , y  )++;
			field.$(x  , y+1)++;
			field.$(x  , y-1)++;
			field.$(x+1, y  )++;
			field.$(x-1, y  )++;
		}
	}

	int clean = 0;
	int max = 0;
	for(int y = 0; y < 10; y++)
		for(int x = 0; x < 10; x++)
		{
			int& cell = field.$(x, y);

			if(cell == 0)
				clean++;
			else if(max < cell)
				max = cell;
		}

	cout << clean << endl;
	cout << max << endl;

	return 0;
}

C++: #include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)

int xy[10][10];

void set(int x, int y)
{
    if(x>=0 && y>=0 && x<=9 && y <= 9)
        xy[x][y]++;
}

int main(void)
{
    int size, x, y, white, deep;
    while(~scanf("%d,%d,%d", &x, &y, &size))
    {
        if(size >= 1)
        {
            set(x,y);
            set(x,y-1);
            set(x,y+1);
            set(x-1,y);
            set(x+1,y);
        }
        if(size >= 2)
        {
            set(x+1,y+1);
            set(x+1,y-1);
            set(x-1,y+1);
            set(x-1,y+1);
        }
        if(size == 3)
        {
            set(x+2,y);
            set(x-2,y);
            set(x,y+2);
            set(x,y-2);
        }
    }
    
    white = 0;
    deep = 0;
    rep(i,10)
    {
        rep(j,10)
        {
            if(xy[i][j] == 0)
                white++;
            if(deep < xy[i][j])
                deep = xy[i][j];
        }
    }
    
    cout << white << "\n" << deep << endl;

    return 0;
}

C++: #include <iostream>
#include <stdio.h>
using namespace std;
int m[10][10];
void small(int x,int y,int r) {
	if (y-r>=0) m[x][y-r]++;
	if (x-r>=0) m[x-r][y]++; 
	if (x+r<=9) m[x+r][y]++;
	if (y+r<=9) m[x][y+r]++;
	m[x][y]++;
}
void middle(int x,int y) {
	for (int i=-1; i<2; i++) for (int j=-1; j<2; j++) 
		if (x+i>=0 && x+i<=9 && y+j>=0 && y+j<=9) m[x+i][y+j]++;
}
void large(int x,int y) {
	middle(x,y);
	small(x,y,2);
    m[x][y]--;
}

int main() {
	int x,y,n,i,j,h,k;
	while(scanf("%d,%d,%d",&x,&y,&n)!=EOF) {
		if (n==1) small(x,y,1); 
		if (n==2) middle(x,y);
		if (n==3) large(x,y);
	}
    n=0; h=0; k=0;
	for (i=0;i<10;i++) for (j=0;j<10;j++) {
		if (m[i][j]==0) k++; else h=h<m[i][j] ? m[i][j] : h;
	}
    cout << k << endl << h << endl;
	return 0;
	}

C++: #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cassert>
#include <iostream>
#include <cctype>
#include <sstream>
#include <string>
#include <list>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <numeric>
#include <algorithm>
#include <bitset>
#include <complex>
#include <fstream>
using namespace std;
typedef long long ll;
const double EPS = 1e-9;
typedef vector<int> vint;
typedef pair<int, int> pint;
#define rep(i, n) REP(i, 0, n)
#define ALL(v) v.begin(), v.end()
#define MSG(a) cout << #a << " " << a << endl;
#define REP(i, x, n) for(int i = x; i < n; i++)
template<class T> T RoundOff(T a){ return int(a+.5-(a<0)); }
template<class T, class C> void chmax(T& a, C b){ if(a < b) a = b; }
template<class T, class C> void chmin(T& a, C b){ if(b < a) a = b; }
template<class T, class C> pair<T, C> mp(T a, C b){ return make_pair(a, b); }

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

int main()
{
	int field[10][10];
	memset(field, 0, sizeof(field));

	int x, y, s;

	while(cin >> x >> y >> s)
	{
		int dx[] = {(s == 1 ? (0, 0, 1, -1) : s == 2 ? (0, 0, 1, -1, 1, 1, -1, -1) : (0, 0, 1, -1, 1, 1, -1, -1, 0, 0, 2, -2))};
		int dy[] = {(s == 1 ? (1, -1, 0, 0) : s == 2 ? (0, 0, 1, -1, 1, -1, 1, -1) : (0, 0, 1, -1, 1, -1, 1, -1, 2, -2, 0, 2))};

		rep(i, s*4)
			if(range(x + dx[i], y + dy[i]))
				field[x + dx[i]][y + dy[i]]++;
	}

	int res = 0;
	int blank = 0;

	rep(i, 10) rep(j, 10)
	{
		if(!field[i][j])
			blank++;
		else
			chmax(res, field[i][j]);
	}

	cout << blank << endl << res << endl;
}

C++: #include <iostream>
using namespace std;
 
int field[10][10] = {0};
 
void small(int x,int y){
    int vx[4] = {-1,0,1,0};
    int vy[4] = {0,-1,0,1};
    if(x>=0 && x<10 && y>=0 && y<10)
        field[x][y]++;
    for(int i=0;i<4;i++){
        if(x+vx[i]>=0 && x+vx[i] <10 && y+vy[i]>=0 && y+vy[i]<10)
            field[x+vx[i]][y+vy[i]]++;
    }  
}
void mid(int x,int y){
    int vx[3] = {-1,0,1};
    int vy[3] = {-1,0,1};
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
        if(x+vx[i]>=0 && x+vx[i] <10 && y+vy[j]>=0 && y+vy[j]<10)
            field[x+vx[i]][y+vy[j]]++;
        }
    }
}
void large(int x,int y){
    int vx[4] = {-2,0,2,0};
    int vy[4] = {0,-2,0,2};
    mid(x,y);
    for(int i=0;i<4;i++){
        if(x+vx[i]>=0 && x+vx[i] <10 && y+vy[i]>=0 && y+vy[i]<10)
            field[x+vx[i]][y+vy[i]]++;
    }
}
 
void search()
{
    int m = 0;
    int zerocount = 0;
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            if(field[i][j]==0)
                zerocount++;
            m = max(m,field[i][j]);
        }
    }
    cout << zerocount << endl;
    cout << m << endl;
}
int main()
{
    int x,y,size;
    char dot;
    while(cin >> x >> dot >> y >> dot >> size){
        if(size == 1)
            small(x,y);
        else if(size == 2)
            mid(x,y);
        else if(size == 3)
            large(x,y);
    }
    search();
    return 0;
}