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++: #define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES

#include "bits/stdc++.h"
#define REP(i,a,b) for(int i=a;i<b;++i)
#define rep(i,n) REP(i,0,n)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define ALL(a) begin(a),end(a)
#define ifnot(a) if(not (a))
#define dump(x)  cerr << #x << " = " << (x) << endl
using namespace std;

// #define int ll
#ifdef _MSC_VER
const bool test = true;
#else 
const bool test = false;
#endif

int dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 };
#define INF (1 << 28)
ull mod = (int)1e9 + 7;
//.....................
const int MAX = (int)2e5 + 5;

int field[10][10];

int H = 10;
int W = 10;

bool ng(int y, int x) {
	return y < 0 || H <= y || x < 0 || W <= x;
}

int main() {
	int x, y, size;
	while (scanf("%d,%d,%d",&x,&y,&size) != EOF) {
		if (size == 1) {
			field[y][x]++;
			rep(i, 4) {
				int ny = y + dy[i];
				int nx = x + dx[i];
				if (ng(ny, nx)) continue;
				field[ny][nx]++;
			}
		}
		if (size == 2) {
			REP(ny, y-1, y+2) REP(nx, x-1, x+2) {
				if (ng(ny, nx)) continue;
				field[ny][nx]++;
			}
		}
		if (size == 3) {
			REP(ny, y-1, y+2) REP(nx, x-1, x+2) {
				if (ng(ny, nx)) continue;
				field[ny][nx]++;
			}
			rep(i, 4) {
				int ny = y + dy[i]*2;
				int nx = x + dx[i]*2;
				if (ng(ny, nx)) continue;
				field[ny][nx]++;
			}
		}
	}
	int brank_n = 0;
	int max_value = 0;
	rep(y, 10) rep(x, 10) {
		if (field[y][x] == 0) brank_n++;
		if (field[y][x] > max_value) max_value = field[y][x];
	}
	cout << brank_n << endl << max_value << endl;


	return 0;
}

C++: #include <iostream>

using namespace std;
 
int main(){
    int x,y,sz,f[13][13],cnt = 0,max = 0; 
    for(int i = 0 ; i < 13 ; i++){
	for(int j = 0 ; j < 13 ; j++){
	    f[i][j] = 0;
	}
    }
    while(cin >> x >> y >> sz){
	x += 2; y += 2;
	switch(sz){
	case 3:
	    f[x][y-2]++; f[x][y+2]++;
	    f[x-2][y]++; f[x+2][y]++;
	case 2:
	    f[x-1][y-1]++; f[x+1][y+1]++;
	    f[x-1][y+1]++; f[x+1][y-1]++;
	case 1:
	    f[x][y]++; f[x-1][y]++; f[x][y-1]++; 
	    f[x+1][y]++; f[x][y+1]++;
	    break;
	}
    }
 
    for(int i = 2 ; i < 12 ; i++){
	for(int j = 2 ; j < 12 ; j++){
	    if(max < f[i][j]) max = f[i][j];
	    if(f[i][j] == 0) cnt++;
	}
    }
    cout << cnt << " " << max << endl; 
    return 0;
}

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

int main(){
    int grid[14][14];
    int s[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
    int m[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
    int l[4][2]={{0,-2},{0,2},{-2,0},{2,0}};
    int x, y, size;
    int i, j;
    int max=0;
    int blank;
    char comma;
    for(i=0;i<14;i++){
        for(j=0;j<14;j++){
            grid[i][j] = 0;
        }
    }
    while(cin >> x >> comma >> y >> comma >> size){
        x += 2;
        y += 2;
        grid[x][y] += 1;
        for(i=0;i<4;i++){
            grid[x+s[0]][y+s[1]] += 1;
        }
        if(size > 1){
            for(i=0;i<4;i++){
                grid[x+m[0]][y+m[1]] += 1;
            }
            if(size > 2){
                for(i=0;i<4;i++){
                    grid[x+l[0]][y+l[1]] += 1;
                }
            }
        }
    }
    for(i=2;i<12;i++){
        for(j=2;j<12;j++){
            if(grid[i][j] > max){
                max = grid[i][j];
            }else if(grid[i][j] = 0){
                blank += 1;
            }
        }
    }
    cout << blank << endl;
    cout << max << endl;
    return 0;
}

C++: #include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(void){
  int a[15][15]={0};
  int x,y,size,c=0,m=0;
  while(scanf("%d,%d,%d",&x,&y,&size) != EOF){
    a[x][y]++;
    a[x-1][y]++;
    a[x+1][y]++;
    a[x][y-1]++;
    a[x][y+1]++;
    if(size==1) continue;
    a[x-1][y-1]++;
    a[x+1][y-1]++;
    a[x-1][y+1]++;
    a[x+1][y+1]++;
    if(size==2) continue;
    a[x-2][y]++;
    a[x+2][y]++;
    a[x][y-2]++;
    a[x][y+2]++;
  }
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      if(!a[i][j]) c++;
      m=max(m,a[i][j]);
    }
  }
  printf("%d\n%d\n",c,m);
}

C++: #include<iostream>
#include<algorithm>
using namespace std;
int main(){
  string str;
  int paper[10][10];
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      paper[i][j]=0;
    }
  }
  int I=50;
  while(cin >> str){
      int x,y,s;
      x=str[0]-48;
      y=str[2]-48;
      s=str[4]-48;
      if(s==1){
        paper[x][y]++;
        paper[x+1][y]++;
        paper[x-1][y]++;
        paper[x][y+1]++;
        paper[x][y-1]++;
      }
      else if(s==2){
        paper[x][y]++;
        paper[x][y+1]++;
        paper[x][y-1]++;
        paper[x+1][y]++;
        paper[x+1][y+1]++;
        paper[x+1][y-1]++;
        paper[x-1][y]++;
        paper[x-1][y+1]++;
        paper[x-1][y-1]++;
      }
      else if(s==3){
        paper[x][y-2]++;
        paper[x+1][y-1]++;
        paper[x][y-1]++;
        paper[x-1][y-1]++;
        paper[x-2][y]++;
        paper[x-1][y]++;
        paper[x][y]++;
        paper[x+1][y]++;
        paper[x+2][y]++;
        paper[x-1][y+1]++;
        paper[x][y+1]++;
        paper[x+1][y+1]++;
        paper[x][y+2]++;
      }
    }
  int white=0,koii=0;
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      if(paper[i][j]==0)white++;
      koii=max(koii,paper[i][j]);
    }
  }
  cout << white << endl << koii << endl;
}

C++: #include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

constexpr auto N=10;

int main()
{
  vector<pair<int,int>> const inc[] = {
    { {0,-1}, {-1,0}, {0,0}, {1,0}, {0,1} },
    { {-1,-1}, {0,-1}, {1,-1}, {-1,0}, {0,0}, {1,0}, {-1, 1}, {0,1}, {1,1} },
    { {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} }
  };

  unsigned int p[N][N]={};
  int x, y, s;
  while( scanf( "%d,%d,%d", &x, &y, &s ) != EOF ) {
    for( auto const i : inc[s-1] ) {
      auto const px = x + i.first, py = y + i.second;
      if ( px >= 0 && px < N && py >= 0 && py < N )
        ++p[px][py];
    }
  }

  cout
    << count( &p[0][0], &p[0][0]+N*N, 0 ) << endl
    << *max_element( &p[0][0], &p[0][0]+N*N ) << endl;
}