Go: package main

import (
	"bufio"
	"os"
	"strings"
	"strconv"
	"fmt"
)

func rangeCheck(x, y int) bool {
	if x >= 0 && x <= 9 && y >= 0 && y <= 9 {
		return true
	} else {
		return false
	}
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	paper := make([][]int, 10)
	for i := range paper {
		paper[i] = make([]int, 10)
		for j := range paper[i] {
			paper[i][j] = 0
		}
	}
	// fmt.Println(paper)
	for scanner.Scan() {
		infos := strings.Split(scanner.Text(), ",")
		x, _ := strconv.Atoi(infos[0])
		y, _ := strconv.Atoi(infos[1])
		s, _ := strconv.Atoi(infos[2])
		// fmt.Println(x, y, s)
		switch s {
		case 1:
			paper[x][y]++
			if rangeCheck(x, y-1) {
				paper[x][y-1]++
			}
			if rangeCheck(x, y+1) {
				paper[x][y+1]++
			}
			if rangeCheck(x-1, y) {
				paper[x-1][y]++
			}
			if rangeCheck(x+1, y) {
				paper[x+1][y]++
			}
			continue
		case 2:
			paper[x][y]++
			if rangeCheck(x-1, y-1) {
				paper[x-1][y-1]++
			}
			if rangeCheck(x, y-1) {
				paper[x][y-1]++
			}
			if rangeCheck(x+1, y-1) {
				paper[x+1][y-1]++
			}
			if rangeCheck(x-1, y) {
				paper[x-1][y]++
			}
			if rangeCheck(x+1, y) {
				paper[x+1][y]++
			}
			if rangeCheck(x-1, y+1) {
				paper[x-1][y+1]++
			}
			if rangeCheck(x, y+1) {
				paper[x][y+1]++
			}
			if rangeCheck(x+1, y+1) {
				paper[x+1][y+1]++
			}
			continue
		case 3:
			paper[x][y]++
			if rangeCheck(x-1,y-1) {
				paper[x-1][y-1]++
			}
			if rangeCheck(x,y-1) {
				paper[x][y-1]++
			}
			if rangeCheck(x+1,y-1) {
				paper[x+1][y-1]++
			}
			if rangeCheck(x-1,y) {
				paper[x-1][y]++
			}
			if rangeCheck(x+1,y) {
				paper[x+1][y]++
			}
			if rangeCheck(x-1,y+1) {
				paper[x-1][y+1]++
			}
			if rangeCheck(x,y+1) {
				paper[x][y+1]++
			}
			if rangeCheck(x+1,y+1) {
				paper[x+1][y+1]++
			}
			if rangeCheck(x,y-2) {
				paper[x][y-2]++
			}
			if rangeCheck(x-2,y) {
				paper[x-2][y]++
			}
			if rangeCheck(x+2,y) {
				paper[x+2][y]++
			}
			if rangeCheck(x,y+2) {
				paper[x][y+2]++
			}
			continue
		}
	}
	count := 0
	max := -1
	for i := range paper {
		for j := range paper[i] {
			if paper[i][j] == 0 {
				count++
			}
			if max >= paper[i][j] {
				max = max
			} else {
				max = paper[i][j]
			}
		}
	}
	fmt.Printf("%d\n%d", count, max)
}

C++: #include <iostream>

using namespace std;

const int SMALL = 1;
const int MIDDLE = 2;
const int LARGE = 3;
int paper[10][10] = {0};

void Dropping_Ink(int x, int y, int size)
{
		paper[x][y]++;
		if(x-1 > -1)    paper[y][x-1]++;
		if(x+1 < 10)    paper[y][x+1]++;
		if(y-1 > -1)    paper[y-1][x]++;
		if(y+1 < 10)    paper[y+1][x]++;

		if(size >= MIDDLE)
		{
			if(x-1 > -1)
			{
				if(y-1 > -1)    paper[y-1][x-1]++;
				if(y+1 < 10)    paper[y+1][x-1]++;
			}
			if(x+1 < 10)
			{
				if(y-1 > -1)    paper[y-1][x+1]++;
				if(y+1 < 10)    paper[y+1][x+1]++;
			}
		}

		if(size == LARGE)
		{
			if(x-2 > -1)    paper[y][x-2]++;
			if(x+2 < 10)    paper[y][x+2]++;
			if(y-2 > -1)    paper[y-2][x]++;
			if(y+2 < 10)    paper[y+2][x]++;
		}
}

int main()
{
	int x, y, size, white, color;
	char c[2];

	while(cin >> x >> c[0] >> y >> c[1] >> size)
	{
		if(cin.eof())    break;

		cout << x << ',' << y << endl;

		Dropping_Ink(x, y, size);	
	}

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

	cout << white << endl << color << endl;
	
	return 0;
}

C++: #include <cstdio>

using namespace std;

int paper[10][10];

void dropInk(int ary[][2], int size, int x, int y)
{
        int nx, ny;

        for (int i = 0; i < size; i++) {
                nx = x + ary[i][0];
                ny = y + ary[i][1];
                if ((0 <= nx && nx < 10) && (0 <= ny && ny < 10)) {
                        paper[nx][ny]++;
                }
        }
}

int main()
{
        int sm[5][2] = {{-1, 0}, {1, 0}, {0, -1},
                                   {0, 0}, {0, 1}},
                md[9][2] = {{-1, -1}, {-1, 0}, {-1, 1},
                                   {0, -1}, {0, 0}, {0, 1},
                                   {1, -1}, {1, 0}, {1, 1}},
                lr[13][2] = {{-2, 0}, {-1, -1}, {-1, 0}, {-1, 1},
                                        {0, -2}, {0, -1}, {0, 0}, {0, 1}, {0, 2},
                                        {1, -1}, {1, 0}, {1, 1}, {2, 0}};
        int x, y, s;

        for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 10; j++) {
                        paper[i][j] = 0;
                }
        }
        while (scanf("%d%*c%d%*c%d", &x, &y, &s) != EOF) {
                switch (s) {
                case 1:
                        dropInk(sm, 5, x, y);
                        break;
                case 2:
                        dropInk(md, 9, x, y);
                        break;
                default:
                        dropInk(lr, 13, x, y);
                        break;
                }
        }

        int noInk = 0, most = 0;
        for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 10; j++) {
                        if (!paper[i][j]) {
                                noInk++;
                        }
                        else if (paper[i][j] > most){
                                most = paper[i][j];
                        }
                }
        }
        printf("%d\n%d\n", noInk, most);

        return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;

int paper[50][50];


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


void dropMidium(int y,int x){
  for(int dy=-1;dy<=1;dy++)
    for(int dx=-1;dx<=1;dx++)paper[y+dy][x+dx]++;
}

void dropLarge(int y,int x){
  dropMidium(y,x);
  int dx[] = {0,0,2,-2};
  int dy[] = {2,-2,0,0};
  for(int i=0;i<4;i++) paper[y+dy[i]][x+dx[i]]++;
}


int main(){
  int x,y,s;
  while(scanf("%d,%d,%d",&x,&y,&s)!=EOF){
    x+=10;
    y+=10;
    if(s == 1)dropSmall(y,x);
    if(s == 2)dropMidium(y,x);
    if(s == 3)dropLarge(y,x);
  }

  int cnt = 0;
  int mx = 0;
  for(int i=10;i<20;i++)
    for(int j=10;j<20;j++){
      if(paper[i][j] == 0) cnt++;
      if(paper[i][j] > mx) mx = paper[i][j];
    }
  
  cout<<cnt<<endl;
  cout<<mx<<endl;
  
  return 0;
}

C++: #include<iostream>
#include<stdio.h>
using namespace std;
int main(){
	int a[10][10]={},x,y,size,dumy=0,max=0,ans=0;
	int mx[13]={0,0,-1,1,0,-1,1,-1,1,0,-2,2,0},my[13]={0,-1,0,0,1,-1,-1,1,1,-2,0,0,2};
	while(scanf("%d,%d,%d",&x,&y,&size)!=EOF){
		dumy=4*size+1;
		//cout<<size<<endl;
		for(int i=0;i<dumy;i++){
			if(x+mx[i]>=0&&y+my[i]>=0&&x+mx[i]<10&&y+my[i]<10)
			a[x+mx[i]][y+my[i]]++;
		}
	}
	for(int i=0;i<10;i++){
		for(int j=0;j<10;j++){
			if(a[i][j]==0){
				ans++;
			}else{
				if(max<=a[i][j])
				max=a[i][j];
			}
		}
	}
	cout<<ans<<endl<<max<<endl;
return 0;
}

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

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

void small_ink(int x,int y){
  paper[y][x]++;
  if(x+1<10)paper[y][x+1];
  if(x-1>=0)paper[y][x-1];
  if(y+1<10)paper[y+1][x];
  if(y-1>=0)paper[y-1][x];
}
void midium_ink(int x,int y){
  for(int i=-1;i<2;i++){
    for(int j=-1;i<2;j++){
      if(y+i>=0 && y+i<10 && x+j>=0 && x+j<10)paper[y+i][x+j]++;
    }
  }
}
void big_ink(int x,int y){
  for(int i=-1;i<2;i++){
    for(int j=-1;i<2;j++){
      if(y+i>=0 && y+i<10 && x+j>=0 && x+j<10)paper[y+i][x+j]++;
    }
  }
  for(int i=-1;i<2;i=i+2){
    for(int j=-1;j<2;j=j+2){
      if(y+i*2>=0 && y+i*2<10 && x+j*2>=0 && x+j*2<10)paper[y+i*2][x+j*2]++;
    }
  }
}

int main(){
  int x,y,s;
  int white=0;
  int darkest=0;
  while(scanf("%d,%d,%d",&x,&y,&s)!=EOF){
    if(s==1)small_ink(x,y);
    else if(s==2)midium_ink(x,y);
    else if(s==3)big_ink(x,y);
  }
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      if(paper[i][j]==0)white++;
      if(paper[i][j]>darkest)darkest=paper[i][j];
    }
  }
  cout<<white<<endl<<darkest<<endl;
}