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

int main(){
  int x[10][10];
  int a,b,c;
  int cou=0,max=0;
  int ink[3]={5,9,13};
  int tmp[3][2][13]={
    {{0,0,1,0,-1},{0,-1,0,1,0}},
    {{0,0,1,1,1,0,-1,-1,-1},{0,-1,-1,0,1,1,1,0,-1}},
    {{0,0,1,1,1,0,-1,-1,-1,0,2,0,-2},{0,-1,-1,0,1,1,1,0,-1,-2,0,2,0}}
  };
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      x[i][j] = 0;
    }
  }
  while(scanf("%d,%d,%d\n",&a,&b,&c) != EOF){
    c--;
    for(int i=0;i<ink[c];i++){
      if(a+tmp[c][0][i]>=0 && a+tmp[c][0][i]<10 && b+tmp[c][1][i]>=0 && b+tmp[c][1][i]<10){
	x[a+tmp[c][0][i]][b+tmp[c][1][i]]++;
      }
    }
  }
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      if(x[i][j] == 0){
	cou++;
      }
      else if(x[i][j] > max){
	max = x[i][j];
      }
    }
  }
  cout << cou << endl << max << endl;
}

C++: #include <iostream>
#include <iomanip>
#include <cassert>
#include <algorithm>
#include <functional>
#include <vector>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <map>
#include <bitset>
#include <sstream>
#include <istream>
#include <cmath>
#include <cstdio>

using namespace std;

#define vci vector<int>
#define vcs vector<string>
#define pb push_back
#define sz size()
#define mapii map<int, int>
#define mapci map<char, int>
#define mapsi map<string, int>
#define all(x) x.begin(), x.end()
#define minit(a, i) memset(a, i, sizeof(a));

#define for_(i, a, b) for (int i=(int)a; i<(int)b; i++)
#define for_d(i, a, b) for (int i=(int)a-1; i>=b; i--)
#define for_r(i, a, b, c) for (int i=(int)a; i<(int)b; i += c)
#define for_dr(i, a, b, c) for (int i=(int)a-1; i>=b; i -= c)
#define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)

typedef long long ll;

const int iINF = 2147483647;
const ll lINF = 9223372036854775807;

template <class T> inline void dbg(T t) { cout << t << endl; }

int s[3][3] = {
 {0, 1, 0},
 {1, 1, 1},
 {0, 1, 0}
};

int m[3][3] = {
	{1, 1, 1},
	{1, 1, 1},
	{1, 1, 1}
};

int l[5][5] = {
	{0, 0, 1, 0, 0},
	{0, 1, 1, 1, 0},
	{1, 1, 1, 1, 1},
	{0, 1, 1, 1, 0},
	{0, 0, 1, 0, 0}
};

int area[10][10];

int main() {
	minit(area, 0);
	
	int x, y, size; char c;
	while (cin>>x>>c>>y>>c>>size) {
		switch (size) {
			case 1:
				for_(i, -1, 2) {
					for_(j, -1, 2) {
						if (x+i<0  || 9<x+i || y+j<0 || 9<y+j) continue;
						area[x+i][y+j] += s[i+1][j+1];
					}
				}
				break;
			case 2:
				for_(i, -1, 2) {
					for_(j, -1, 2) {
						if (x+i<0  || 9<x+i || y+j<0 || 9<y+j) continue;
						area[x+i][y+j] += m[i+1][j+1];
					}
				}
				break;
			case 3:
				for_(i, -2, 3) {
					for_(j, -2, 3) {
						if (x+i<0  || 9<x+i || y+j<0 || 9<y+j) continue;
						area[x+i][y+j] += l[i+2][j+2];
					}
				}
				break;
			default:
				break;
		}
	}
	
	int n0 = 0, m = 0;
	for (int i=0; i<10; i++) {
		for (int j=0; j<10; j++) {
			m = max(m, area[i][j]);
			if (area[i][j]==0) n0++;
		}
	}
	
	cout << n0 << endl << m << endl;
	
	return 0;
}

C++: #include <iostream>
#include <algorithm>
int main()
{		int x, y, n;
		char c, b;
	int a = 0;
	int s = 100;
	int xy[10][10] = {};
	while (std::cin >>x>> c >> y >> b >> n) {
		switch (n)
		{
		case 1: {
			if (x != 0) {
				++xy[x - 1][y];
			}
			++xy[x + 1][y];
			if (y != 0) {
				++xy[x][y - 1];
			}
			++xy[x][y + 1];
			break;
		}
		case 2: {
			if (x != 0) {
				++xy[x - 1][y];
				++xy[x - 1][y - 1];
				++xy[x - 1][y + 1];
			}
			if (y != 0) {
				++xy[x][y - 1];
				++xy[x + 1][y - 1];
			}
			++xy[x + 1][y];
			++xy[x][y + 1];
			++xy[x + 1][y + 1];
			break;
		}
		case 3: {
			if (x != 0) {
				++xy[x - 1][y];
				++xy[x - 1][y - 1];
				++xy[x - 1][y + 1];
			}
			if (y != 0) {
				++xy[x][y - 1];
				++xy[x + 1][y - 1];
			}
			++xy[x + 1][y];
			++xy[x][y + 1];
			++xy[x + 1][y + 1];
			if (x != 2) { ++xy[x - 2][y]; }
			++xy[x + 2][y];
			if (y != 2) {
				++xy[x][y - 2];
			}
			++xy[x][y + 2];
			break;
		}
		}
	}

	for (int i = 0; i < 10; ++i) {
		for (int j = 0; j < 10; ++j) {
			if (xy[i][j] > 0) {
				--s;
			}
		}
	}
	a = xy[0][0];
	for (int i = 0; i < 10; ++i) {
		for (int j = 0; j < 10; ++j) {
			if (a < xy[i][j]) {
				a = xy[i][j];
			}
		}
	}
	std::cout << s-1 << std::endl;
	std::cout << a << std::endl;
	return 0;
}

C++: 
#include <cstdio>

using namespace std;

int paper[14][14] = {0};

void drop(int n, int m, int l)
{
    paper[n + 2][m + 2]++;
    if (l == 3)
    {
        paper[n + 2][m]++;
        paper[n + 2][m + 4]++;
        paper[n][m + 2]++;
        paper[n + 4][m + 2]++;
    }
    if (l == 2)
    {
        paper[n + 3][m + 1]++;
        paper[n + 3][m + 3]++;
        paper[n + 1][m + 1]++;
        paper[n + 1][m + 3]++;
    }
    paper[n + 2][m + 1]++;
    paper[n + 2][m + 3]++;
    paper[n + 1][m + 2]++;
    paper[n + 3][m + 2]++;
    return;
}

int n, m, l;

int main()
{
    int max = 0, zero = 0;
    while (scanf("%d,%d,%d\n", &n, &m, &l) != EOF)
    {
        scanf("%d,%d,%d\n", &n, &m, &l);
        drop(n, m, l);
        /* for (int i = 2; i < 12; i++)
        {
            for (int j = 2; j < 12; j++)
            {
                printf(" %d", paper[i][j]);
            }
            printf("\n");
        } */
        n--;
    }

    for (int i = 2; i < 12; i++)
    {
        for (int j = 2; j < 12; j++)
        {
            if (paper[i][j] == 0)
            {
                zero++;
            }
            else if (paper[i][j] > max)
            {
                max = paper[i][j];
            }
        }
    }
    printf("%d %d\n", zero, max);
    return 0;
}