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)
}

Python: class Paper:
    def __init__(self, x, y):
        
        self.A = [[0 for i in range(x)] for j in range(y)]
        self.size = (x, y)
    def drop(self, x, y, s):
        if s == 1:
            if y+1 <= self.size[1]-1:
                self.A[y+1][x] += 1            
            for i in range(max(0, x-1) , 1 + min(self.size[0]-1, x+1)):
                self.A[y][i] += 1
            if y-1 >= 0:
                self.A[y-1][x] += 1

        if s == 2:
            if y+1 <= self.size[1]-1:
                for i in range(max(0, x-1) , 1 + min(self.size[0]-1, x+1)):
                    self.A[y+1][i] += 1
            for i in range(max(0, x-1) , 1 + min(self.size[0]-1, x+1)):
                self.A[y][i] += 1
            if y-1 >= 0:
                for i in range(max(0, x-1) , 1 + min(self.size[0]-1, x+1)):
                    self.A[y-1][i] += 1

        if s == 3:
            if y+2 <= self.size[1]-1:
                self.A[y+2][x] += 1
            if y+1 <= self.size[1]-1:
                for i in range(max(0, x-1) , 1 + min(self.size[0]-1, x+1)):
                    self.A[y+1][i] += 1
            for i in range(max(0, x-2) , 1 + min(self.size[0]-1, x+2)):
                self.A[y][i] += 1
            if y-1 >= 0:
                for i in range(max(0, x-1) , 1 + min(self.size[0]-1, x+1)):
                    self.A[y-1][i] += 1
            if y-2 >= 0:
                self.A[y-2][x] += 1

if __name__ == "__main__":
    import sys 
    p = Paper(10, 10)
    L = sys.stdin.readlines()
    for l in L:
        x, y, s = map(int, l.split(','))
        p.drop(x, y, s)
#        for i in range(10):
#            print(p.A[i])
#        print()
    temp = []
    for y in p.A:
        temp.extend(y)

    A1 = temp.count(0)
    A2 = max(temp)

    print(A1)
    print(A2)

Python: from __future__ import (absolute_import, division, print_function,
                        unicode_literals)
from sys import stdin
from collections import Counter

NUM = [[0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0],
       [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
paper = Counter()
for line in stdin:
    if not line.strip():
        break
    x, y, size = (int(s) for s in line.split(','))

    xidx = [x, x-1, x, x+1, x-2, x-1, x, x+1, x+2, x-1, x, x+1, x]
    yidx = [y-2, y-1, y-1, y-1, y, y, y, y, y, y+1, y+1, y+1, y+2]
    val = NUM[size-1]

    for a, b, i in zip(xidx, yidx, xrange(len(xidx))):
        if a < 0 or 9 < a or b < 0 or 9 < b:
            continue
        paper[a + b * 10] += val[i]

print(sum(1 for i in xrange(100) if not paper[i]))
print(max(paper[i] for i in xrange(100)))

Python: import sys

class Board():
    
    def __init__(self):
        self.B = [0 for _ in range(12 * 12)]
        
        for i in range(0, 12):
            self.B[i] = -1
        for i in range(12, 12 * 12, 12):
            self.B[i] = -1
        for i in range(11, 11 * 12, 12):
            self.B[i] = -1
        for i in range(12 * 11, 12 * 12):
            self.B[i] = -1
    
    def print(self):
        cnt = 0
        for b in self.B:
            if b == 0:
                cnt += 1
        
        print(cnt)
        print(max(self.B))
    
    def inc_if_non_wall(self, x, y):
        idx = (y + 1) * 12 + (x + 1)
        
        if self.B[idx] != -1:
            self.B[idx] += 1
    
    def drop_s(self, x, y):
        self.inc_if_non_wall(x, y)
        self.inc_if_non_wall(x, y - 1)
        self.inc_if_non_wall(x - 1, y)
        self.inc_if_non_wall(x + 1, y)
        self.inc_if_non_wall(x, y + 1)
    
    def drop_m(self, x, y):
        self.drop_s(x, y)
        self.inc_if_non_wall(x - 1, y - 1)
        self.inc_if_non_wall(x + 1, y - 1)
        self.inc_if_non_wall(x - 1, y + 1)
        self.inc_if_non_wall(x + 1, y + 1)
    
    def drop_l(self, x, y):
        self.drop_m(x, y)
        
        idx = (y + 1) * 12 + (x + 1)
        if 12 * 3 < idx:
            self.inc_if_non_wall(x, y - 2)
        if idx < 12 * 9:
            self.inc_if_non_wall(x, y + 2)
        
        self.inc_if_non_wall(x - 2, y)
        self.inc_if_non_wall(x + 2, y)
    

if __name__ == "__main__":
    B = Board()
    for l in sys.stdin:
        x, y, s = map(int, l.split(','))
        if s == 1:
            B.drop_s(x, y)
        elif s == 2:
            B.drop_m(x, y)
        elif s == 3:
            B.drop_l(x, y)
    
    B.print()

Python: import sys

def small(paper, x, y):
    paper[x][y] += 1
    paper[x-1][y] += 1
    paper[x][y-1] += 1
    paper[x][y+1] += 1
    paper[x+1][y] += 1

def medium(paper, x, y):
    small(paper, x, y)
    paper[x-1][y-1] += 1
    paper[x-1][y+1] += 1
    paper[x+1][y-1] += 1
    paper[x+1][y+1] += 1

def large(paper, x, y):
    medium(paper, x, y)
    paper[x-2][y] += 1
    paper[x][y-2] += 1
    paper[x][y+2] += 1
    paper[x+2][y] += 1

def drop(paper, x, y, size):

    if size == 1:
        small(paper, x, y)
    elif size == 2:
        medium(paper, x, y)
    else:
        large(paper, x, y)

    return paper


paper = [[0 for i in range(14)] for j in range(14)]
for s in sys.stdin:
    x, y, size = map(int, s.split(','))
    paper = drop(paper, x+2, y+2, size)

empty = 0
deep = 0

for i in range(10):
    for j in range(10):
        if paper[i+2][j+2] == 0:
            empty += 1
        elif paper[i+2][j+2] > deep:
            deep = paper[i+2][j+2]

print(empty)
print(deep)