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>
using namespace std;

int main(){

	int map[14][14] = {0};
	int x, y, size, m, cnt;
	char cnm;
	
	while(cin >> x >> cnm >> y >> cnm >> size){
		x += 2;
		y += 2;
		switch(size){
			case 3: map[y-2][x]++;
							map[y][x-2]++;
							map[y][x+2]++;
							map[y+2][x]++;
			case 2: map[y-1][x-1]++;
							map[y-1][x+1]++;
							map[y+1][x-1]++;
							map[y+1][x+1]++;
			case 1: map[y][x]++;
							map[y-1][x]++;
							map[y][x-1]++;
							map[y][x+1]++;
							map[y+1][x]++;
							break;
		}
	}
	
	cnt = 0;
	m = 0;
	for(int i=2; i<12; i++){
		for(int j=2; j<12; j++){
			if(map[i][j] == 0) cnt++;
			m = max(m, map[i][j]);
		}
	}
	
	cout << cnt << endl << m << endl;

	return 0;

}

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

int ds[3] = {4,9,13};
int dx[13] = { 0,-1, 0, 1, 0,-1, 1,-1, 1, 0,-2, 2, 0};
int dy[13] = {-1, 0, 0, 0, 1,-1,-1, 1, 1,-2, 0, 0, 2};

int main() {

  int x,y,size;
  char c;
  int map[14][14] = {0};

  int cnt = 0;
  int map_max = 0;

  while( cin >> x >> c >> y >> c >> size ) {

    for ( int i = 0; i < ds[size-1]; i++ ) {

      map[ x+2 + dx[i] ][ y+2 + dy[i] ]++;

    }

  }

  for ( int i = 2; i < 12; i++ ) {
    for ( int j = 2; j < 12; j++ ) {
      
      if ( map[i][j] == 0 ) cnt++;
      map_max = max( map_max, map[i][j] );
      
    }
  }

  cout << cnt << endl << map_max << endl;

  return 0;

}

C++: #include <iostream>

using namespace std;

int paper[10][10];

void init() {
    for (int i = 0; i < 10; i++) 
        for (int j = 0; j < 10; j++) 
            paper[i][j] = 0;
}

void drop_small(int x, int y) {
    paper[y][x]++;
    int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
    for (int i = 0; i < 4; i++) {
        if (y + dy[i] == 10 || x + dx[i] == 10) continue;
        paper[ y+dy[i] ][ x+dx[i] ]++;
    }
}

void drop_middle(int x, int y) {
    drop_small(x, y);
    int dx[4] = {1, 1, -1, -1}, dy[4] = {1, -1, 1, -1};
    for (int i = 0; i < 4; i++) {
        if (y + dy[i] == 10 || x + dx[i] == 10) continue;
        paper[ y+dy[i] ][ x+dx[i] ]++;
    }
}
    
void drop_large(int x, int y) {
    drop_middle(x, y);
    int dx[4] = {2, 0, -2, 0}, dy[4] = {0, 2, 0, -2};
    for (int i = 0; i < 4; i++) {
        if (y + dy[i] == 10 || x + dx[i] == 10) continue;
        paper[ y+dy[i] ][ x+dx[i] ]++;
    }
}

int main() {
    init();
    int x, y, s;
    char d;
    while (cin >> x >> d >> y >> d >> s) {
        switch (s) {
            case 1:
                drop_small(x, y);
                break;
            case 2:
                drop_middle(x, y);
                break;
            case 3:
                drop_large(x, y);
                break;
        }
    }

    int most = 0;
    int clean = 0;

    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            if (paper[i][j] == 0) clean++;
            if (paper[i][j] > most) most = paper[i][j];
        }
    }

    cout << clean << endl;
    cout << most << endl;
    
    return 0;
}

C++: #include <iostream>
using namespace std;
int main()
{
	int cell[10][10] = {{0}}, x, y, size, i, j, max = 0, num = 0;
	char c;
	while (1)
	{
		cin >> x;
		if (cin.eof()) break;
		cin >> c >> y >> c >> size;
		switch (size)
		{
			case 1:
				for (i = y-1; i <= y+1; i++)
				{
					for (j = ((i == y-1 || i == y+1) ? x : x-1); j <= ((i == y-1 || i == y+1) ? x : x+1); j++)
					{
						if ((0 <= i && i < 10) || (0 <= j && j < 10))
							cell[j][i]++;
					}
				}
				break;
			case 2:
				for (i = y-1; i <= y+1; i++)
				{
					for (j = x-1; j <= x+1; j++)
					{
						if ((0 <= i && i < 10) || (0 <= j && j < 10))
							cell[j][i]++;
					}
				}
				break;
			case 3:
				for (i = y-2; i <= y+2; i++)
				{
					for (j = ((i == y-2 || i == y+2) ? x : ((i == y-1 || i == y+1) ? x-1 : x-2)); j <= ((i == y-2 || i == y+2) ? x : ((i == y-1 || i == y+1) ? x+1 : x+2)); j++)
					{
						if ((0 <= i && i < 10) || (0 <= j && j < 10))
							cell[j][i]++;
					}
				}
				break;
		}
	}
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (cell[j][i] >= max)
				max = cell[j][i];
			if (cell[j][i] == 0)
				num++;
		}
	}
	cout << num << endl << max << endl;
	return 0;
}

C++: #include <bits/stdc++.h>

using namespace std;

int main()
{
    int x, y, s;
    char c;
    vector<vector<int>> v(14, vector<int>(14, 0));
    while (cin >> x >> c >> y >> c >> s) {
        x += 2; y += 2;
        switch (s) {
            case 3:
                v[x][y-2]++; v[x][y+2]++;
                v[x-2][y]++; v[x+2][y]++;
            case 2:
                v[x-1][y-1]++; v[x-1][y+1]++;
                v[x+1][y-1]++; v[x+1][y+1]++;
            case 1:
                v[x+1][y]++; v[x-1][y]++;
                v[x][y-1]++; v[x][y+1]++;
                v[x][y]++;
                break;
        }
    }

    int mx = 0, cnt = 0;
    for (int i = 2; i < 12; i++) {
        for (int j = 2; j < 12; j++) {
            mx = max(mx, v[i][j]);
            if (v[i][j] == 0) cnt++;
        }
    }
    cout << cnt << "\n" << mx << endl;
    return 0;
}

C++: #include <iostream>
#include <string>
using namespace std;

int main(){
	string input;
	int mas[14][14];
	for(int i=0; i<14; i++){
		for(int j=0; j<14; j++){
			mas[i][j] = 0;
		}
	}
	int size1x[] = {-1, 0, 1, 0};	
	int size1y[] = {0, -1, 0, 1};	
	int size2x[] = {-1, 1, 1, -1};	
	int size2y[] = {-1, -1, 1, 1};	
	int size3x[] = {-2, 0, 2, 0};	
	int size3y[] = {0, -2, 0, 2};	
	while(cin>>input){
		int x, y, size;
		sscanf(input.c_str(), "%d,%d,%d", &x, &y, &size);
		x += 2;
		y += 2;
		mas[x][y]++;
		if(size >= 1){
			for(int i=0; i<4; i++){
				mas[x+size1x[i]][y+size1y[i]]++;
			}
		}
		if(size >= 2){
			for(int i=0; i<4; i++){
				mas[x+size2x[i]][y+size2y[i]]++;
			}
		}
		if(size >= 3){
			for(int i=0; i<4; i++){
				mas[x+size3x[i]][y+size3y[i]]++;
			}
		}
	}
	int num = 0;
	int maxv = 0;
	for(int i=2; i<12; i++){
		for(int j=2; j<12; j++){
			if(mas[i][j]){
				num++;
				maxv = max(maxv, mas[i][j]);
			}
		}
	}
	cout<<num<<endl<<maxv<<endl;
	return 0;
}