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 <string>
#include <algorithm>
#include <math.h>
#include <vector>
#include <set>

using namespace std;
typedef long long LL;
static const double EPS = 1e-9;

#define FOR(i,k,n) for (int i=(k); i<(int)(n); ++i)
#define REP(i,n) FOR(i,0,n) 

const static int dx[12] = {1,0,-1,0,1,-1,-1,1,2,0,-2,0};
const static int dy[12] = {0,1,0,-1,1,1,-1,-1,0,2,0,-2};
int main(void){  
  int date[14][14]={0};
  int x,y,s,c=0,m=0;
  
  while(scanf("%d,%d,%d",&x,&y,&s) != EOF)
    REP(i,4*s) date[x+2+dx[i]][y+2+dy[i]] += 1;

  FOR(i,2,13)
    FOR(j,2,13){
      if(date[i][j]>0) c++;
      m = max(date[i][j], m);
    }
  cout << 100-c << endl;
  cout << m << endl;
}

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

int board[10][10];

void small(int x, int y){
	board[x][y]++;
	if(x>=1) board[x-1][y]++;
	if(x<=8) board[x+1][y]++;
	if(y>=1) board[x][y-1]++;
	if(y<=8) board[x][y+1]++;
}

void middle(int x, int y){
	small(x, y);
	if(x>=1 && y>=1) board[x-1][y-1]++;
	if(x>=1 && y<=8) board[x-1][y+1]++;
	if(x<=8 && y>=1) board[x+1][y-1]++;
	if(x<=8 && y<=8) board[x+1][y+1]++;
}

void large(int x, int y){
	middle(x, y);
	if(x>=2) board[x-2][y]++;
	if(x<=7) board[x+2][y]++;
	if(y>=2) board[x][y-2]++;
	if(y<=7) board[x][y+2]++;
}

int main(void){
	
	for(int i=0; i<10; i++)
		for(int j=0; j<10; j++)
			board[i][j] = 0;

	int x, y, size;
	char c1, c2;

	while(cin >> x >> c1 >> y >> c2 >> size){
		switch(size){
		case 1:
			small(x, y);
			break;
		case 2:
			middle(x, y);
			break;
		case 3:
			large(x, y);
			break;
		}
	}

	int max = 0;
	int count = 0;

	for(int i=0; i<10; i++){
		for(int j=0; j<10; j++){
			if(board[i][j] > max) max = board[i][j];
			if(board[i][j] == 0) count++;
		}
	}

	cout << count << endl << max << endl;

	return 0;
}

C++: #include <stdio.h>

int main(void)
{
	int x,y;
	int i, j;
	int n;
	int size;
	int god[10][10];
	int space;
	int mn;
	
	for (i = 0; i < 10; i++){
		for (j = 0; j < 10; j++){
			god[i][j] = 0;
		}
	}
	
	while (scanf("%d,%d,%d", &x, &y, &size) != EOF){
		if (size == 1){
			n = 1;
			god[x][y]++;
			for (i = 0; i < 2; i++){
				if (x + n >= 0 && x + n < 10){
					god[x + n][y]++;
				}
				if (y + n >= 0 && y + n < 10){
					god[x][y + n]++;
				}
				n = -1;
			}
		}
		if (size == 2){
			n = 1;
			god[x][y]++;
			for (i = 0; i < 2; i++){
				if (x + n >= 0 && x + n < 10){
					god[x + n][y]++;
				}
				if (y + n >= 0 && y + n < 10){
					god[x][y + n]++;
				}
				if (x + n >= 0 && x + n < 10 && y + n >= 0 && y + n < 10){
					god[x + n][y + n]++;
				}
				if (x + n >= 0 && x + n < 10 && y - n >= 0 && y - n < 10){
					god[x + n][y - n]++;
				}
				n = -1;
			}
		}
		if (size == 3){
			n = 1;
			god[x][y]++;
			for (i = 0; i < 2; i++){
				if (x + n >= 0 && x + n < 10){
					god[x + n][y]++;
				}
				if (y + n >= 0 && y + n < 10){
					god[x][y + n]++;
				}
				if (x + n >= 0 && x + n < 10 && y + n >= 0 && y + n < 10){
					god[x + n][y + n]++;
				}
				if (x + n >= 0 && x + n < 10 && y - n >= 0 && y - n < 10){
					god[x + n][y - n]++;
				}
				
				if (x + n * 2 >= 0 && x + n * 2 < 10){
					god[x + n * 2][y]++;
				}
				if (y + n * 2 >= 0 && y + n * 2 < 10){
					god[x][y + n * 2]++;
				}
				n = -1;
			}
		}
	}
	space = 0;
	mn = 0;
	for (i = 0; i < 10; i++){
		for (j = 0; j < 10; j++){
			if (god[i][j] == 0){
				space++;
			}
			if (mn < god[i][j]){
				mn = god[i][j];
			}
		}
	}
	
	printf("%d\n%d\n", space, mn);
	
	return (0);
}

C++: #include <iostream>

using namespace std;

int map[10][10]= {};
const int dx[] = {1, 0, -1, 0, 1, 1, -1, -1, 2, -2, 0, 0}, dy[] = {0, 1, 0, -1, 1, -1, 1, -1, 0, 0, 2, -2};
  
void drop_ink(int x, int y, int size)
{
  map[x][y]++;
  for(int i = 0; i < 4 * size; i++)
    if(x+dx[i] < 10 && x+dx[i] >= 0 && y+dy[i] < 10 && y+dy[i] >= 0)
      map[x+dx[i]][y+dy[i]]++;
}

int main()
{
  int x, y, s, ans1, ans2 = 0;
  char c;
  while(cin >> x >> c >> y >> c >> s){
    drop_ink(x, y, s);
    ans1 = 0;
    for(int i = 0; i < 10; i++){
      for(int j = 0; j < 10; j++){
	if(map[i][j] == 0)
	  ans1++;
	ans2 = (map[i][j] > ans2) ? map[i][j] : ans2;        
      }
    }
  }
  cout << ans1 << endl << ans2 << endl;
}

C++: #include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int char_to_int(char c) {
	if (c == '0')return 0;
	else if (c == '1')return 1;
	else if (c == '2')return 2;
	else if (c == '3')return 3;
	else if (c == '4')return 4;
	else if (c == '5')return 5;
	else if (c == '6')return 6;
	else if (c == '7')return 7;
	else if (c == '8')return 8;
	else if (c == '9')return 9;
}
int main(){
	string str;
	int p[10][10] = { 0 };
	while (cin >> str){
		int a = char_to_int(str[0]);
		int b = char_to_int(str[2]);
		int s = char_to_int(str[4]);
		p[a][b]++;
		if (s >= 1){
			p[a - 1][b]++;
			p[a + 1][b]++;
			p[a][b - 1]++;
			p[a][b + 1]++;
			if (s >= 2) {
				p[a - 1][b + 1]++;
				p[a + 1][b - 1]++;
				p[a - 1][b - 1]++;
				p[a + 1][b + 1]++;
				if (s >= 3) {
					p[a - 2][b]++;
					p[a + 2][b]++;
					p[a][b - 2]++;
					p[a][b + 2]++;
				}
			}
		}
	}
	int sum = 0;
	int dr = 0;
	for (int i = 0; i < 10; i++){
		for (int j = 0; j < 10; j++) {
			if (p[i][j] == 0)sum++;
			dr = max(dr, p[i][j]);
		}
	}
	cout << sum << endl << dr << endl;
}

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

using namespace std;

int main(void){

  int p[14][14] = {0};
  int x,y,size;
  char ten,tenten;
 back:;
  while( cin >> x >> ten >> y >> tenten >> size ){
    x += 2;
    y += 2;
    switch(size){
    case 3:
      p[x-2][y]++;
      p[x+2][y]++;
      p[x][y-2]++;
      p[x][y+2]++;
    case 2:
      p[x+1][y+1]++;
      p[x-1][y-1]++;
      p[x+1][y-1]++;
      p[x-1][y+1]++;
    case 1:
      p[x][y+1]++;
      p[x][y-1]++;
      p[x-1][y]++;
      p[x+1][y]++;
      p[x][y]++;
    }
  }
  
  int cnt = 0;
  int m = 0;
  for( int i = 2 ; i < 12 ; i++ ){
    for( int j = 2 ; j < 12 ; j++ ){
      if( p[i][j] == 0 ) cnt++;
      m = max( m , p[i][j] );
      //  cout << " " << p[i][j] << " ";
    }
    //cout << endl;
  }
  cout << cnt << endl << m << endl;
  return 0;
}