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

using namespace std;

int sx[5] = {0, 1,  0, -1, 0};
int sy[5] = {0, 0, -1,  0, 1};

int mx[9] = {0, 1,  1,  0, -1, -1, -1, 0, 1};
int my[9] = {0, 0, -1, -1, -1,  0,  1, 1, 1};

int lx[13] = {0, 1,  1,  0, -1, -1, -1, 0, 1, 2,  0, -2, 0};
int ly[13] = {0, 0, -1, -1, -1,  0,  1, 1, 1, 0, -2,  0, 2};

int maze[10][10];

int i, j, xi, xj;

bool isValid(int a, int b) {
    return a >= 0 && b >= 0 && a < 10 && b < 10;
}

vector<string> split(string source, string pattern) {
    unsigned i, base = 0;
    vector<string> ret;
    string buff;

    for(i = 0; i < source.size(); i++) {
        if(source.substr(i, pattern.size()) == pattern) {
            ret.push_back(buff);
            i += pattern.size() - 1;
            buff.clear();
        } else {
            buff += source[i];
        }
    }
    ret.push_back(buff);
    return ret;
}

int main(void) {
    memset(maze, 0, sizeof(maze));

    int ai, aj, s;
    string p;
    vector<string> ok;

    while(getline(cin, p)) {
        ok.clear();
        ok = split(p, ",");

        aj = ok[1].size() > 1 ? 10 : ok[1][0] - '0';
        ai = ok[0].size() > 1 ? 10 : ok[0][0] - '0';
        s = ok[2].size() > 1 ? 10 : ok[2][0] - '0';

        if(s == 1) {
            for(i = 0; i < 5; i++) {
                xi = ai + sx[i];
                xj = aj + sy[i];

                if(isValid(xi, xj)) {
                    maze[xi][xj] += 1;
                }
            }
        } else if(s == 2) {
            for(i = 0; i < 9; i++) {
                xi = ai + mx[i];
                xj = aj + my[i];

                if(isValid(xi, xj)) {
                    maze[xi][xj] += 1;
                }
            }
        } else {
            for(i = 0; i < 13; i++) {
                xi = ai + lx[i];
                xj = aj + ly[i];

                if(isValid(xi, xj)) {
                    maze[xi][xj] += 1;
                }
            }
        }
    }

    int mx = 0, ct = 0;

    for(i = 0; i < 10; i++) {
        for(j = 0; j < 10; j++) {
            if(maze[i][j] == 0) ct += 1;
            mx = max(mx, maze[i][j]);
        }
    }
    printf("%d\n%d", ct, mx);
    return 0;
}

C++: #include<iostream>
int main(){
	int paper[10][10] = {};
	std::pair<int, int>pos;
	int ink;
	char h;
	int max = 0;
	int count = 0;
	while (std::cin >> pos.first >> h >> pos.second >> h >> ink) {
		paper[pos.first][pos.second]++;
		for (int i = 0; i < ink; ++i) {
			if (pos.first - i >= 0 && pos.second - i >= 0)paper[pos.first - i][pos.second - i]++;
			if (pos.first - i >= 0 && pos.second + i <= 9)paper[pos.first - i][pos.second + i]++;
			if (pos.first + i <= 9 && pos.second - i >= 0)paper[pos.first + i][pos.second - i]++;
			if (pos.first + i <= 9 && pos.second + i <= 9)paper[pos.first + i][pos.second + i]++;
		}
		for (int i = 0; i < 10; ++i) {
			for (int j = 0; j < 10; ++j) {
				if (paper[i][j] == 0)++count;
				else if (max < paper[i][j])max = paper[i][j];
			}
		}
	}
		std::cout << count << std::endl;
		std::cout << max << std::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;
}

C++: #include<iostream>
#include<cstdio>
using namespace std;
int vx[4]={1,0,-1,0};
int vy[4]={0,1,0,-1};
int vx2[4]={2,0,-2,0};
int vy2[4]={0,2,0,-2};
int main(){
  string str;
  int x,y,s;
  int Map[10][10];
  for(int i=0;i<10;i++)
    for(int j=0;j<10;j++)
      Map[i][j]=0;
  while(cin>>str){
    x=str[0]-'0';
    y=str[2]-'0';
    s=str[4]-'0';
    switch(s){
    case 1:
      Map[x][y]++;
      for(int i=0;i<4;i++)
	if(x+vx[i]<=9&&x+vx[i]>=0&&y+vy[i]<=9&&y+vy[i]>=0)
	  Map[x+vx[i]][y+vy[i]]++;
      break;
    case 2:
      for(int i=-1;i<=1;i++){
	for(int j=-1;j<=1;j++){
	  if(x+i<=9&&x+i>=0&&y+j<=9&&y+j>=0)
	    Map[x+i][y+j]++;
	}
      }
      break;
    case 3:
      for(int i=-1;i<=1;i++){
	for(int j=-1;j<=1;j++){
	  if(x+i<=9&&x+i>=0&&y+j<=9&&y+j>=0)
	    Map[x+i][y+j]++;
	}
      }
      for(int i=0;i<4;i++)
	if(x+vx2[i]<=9&&x+vx2[i]>=0&&y+vy2[i]<=9&&y+vy2[i]>=0)
	  Map[x+vx2[i]][y+vy2[i]]++;
      break;
    }
    /* for(int i=0;i<10;i++){
      for(int j=0;j<10;j++){
	cout<<Map[i][j]<<" ";
      }
      cout<<endl;
      }*/
  }
  int white=0;
  int Max=0;
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      if(Map[i][j]==0)
	white++;
      Max=max(Max,Map[i][j]);
    }
  }
  cout<<white<<endl<<Max<<endl;
  return 0;
}