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


#define li			long long int
#define rep(i,to)	for(li i=0;i<((li)(to));i++)
#define repp(i,start,to)	for(li i=(li)(start);i<((li)(to));i++)
#define pb			push_back
#define sz(v)		((li)(v).size())
#define bgn(v)		((v).begin())
#define eend(v)		((v).end())
#define allof(v)	(v).begin(), (v).end()
#define dodp(v,n)		memset(v,(li)n,sizeof(v))
#define bit(n)		(1ll<<(li)(n))
#define mp(a,b)		make_pair(a,b)
#define rin	rep(i,n)
#define EPS 1e-12
#define ETOL 1e-8
#define MOD 1000000007
typedef pair<li, li> PI;

#define INF bit(60)

#define DBGP 1


#define idp if(DBGP)
#define F first
#define S second
#define p2(a,b)		idp cout<<a<<"\t"<<b<<endl
#define p3(a,b,c)		idp cout<<a<<"\t"<<b<<"\t"<<c<<endl
#define p4(a,b,c,d)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<endl
#define p5(a,b,c,d,e)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t"<<e<<endl
#define p6(a,b,c,d,e,f)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t"<<e<<"\t"<<f<<endl
#define p7(a,b,c,d,e,f,g)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t"<<e<<"\t"<<f<<"\t"<<g<<endl
#define p8(a,b,c,d,e,f,g,h)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t"<<e<<"\t"<<f<<"\t"<<g<<"\t"<<h<<endl
#define p9(a,b,c,d,e,f,g,h,i)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t"<<e<<"\t"<<f<<"\t"<<g<<"\t"<<h<<"\t"<<i<<endl
#define p10(a,b,c,d,e,f,g,h,i,j)		idp cout<<a<<"\t"<<b<<"\t"<<c<<"\t"<<d<<"\t"<<e<<"\t"<<f<<"\t"<<g<<"\t"<<h<<"\t"<<i<<"\t"<<j<<endl
#define foreach(it,v)	for(__typeof((v).begin()) it=(v).begin(); it!=(v).end(); ++it)
#define p2p(x)		idp p2((x).F, (x).S)
#define dump(x,n)	idp{rep(i,n){cout<<x[i]<<" ";}puts("");}
#define dump2(x,n)	idp{rep(i,n){cout<<"["<<x[i].F<<" , "<<x[i].S<<"] ";}puts("");}
#define dumpi(x)	idp{foreach(it, x){cout<<(*it)<<" ";}puts("");}
#define dumpi2(x)	idp{foreach(it, x){cout<<"["<<(it)->F<<" , "<<(it)->S<<"] ";}puts("");}

#define read2d(a,w,h)	rep(i,h)rep(j,w)cin>>a[i][j]
#define dump2d(a,w,h)	rep(i,h){rep(j,w)cout<<a[i][j]<<" ";puts("");}

typedef pair<li, li> PI;

set<PI> st;

li res[10];
li h, w, n;

inline bool valid(li y, li x) {
	if (min(y, x) < 0)return false;
	if (y >= h)return false;
	if (x >= w)return false;
	return true;
}

bool table[25];


inline PI count_black(li y, li x) {
	li last_black = -1;
	li cnt = 0;
	rep(dy, 3) {
		rep(dx, 3) {
			li now = (y + dy) * 5 + x + dx;
			if (now >= 25) {
				p4(y, dy, x, dx);
				continue;
			}
			if (table[now]) {
				last_black = now;
				cnt++;
			}
		}
	}
	return {(last_black <= 12 ? 1 : 0), cnt};
}

inline void check(li y, li x) {
	// precalc
	li cnt = 0;
	repp(dy, -2, 3) {
		repp(dx, -2, 3) {
			PI now(y + dy, x + dx);
			if (!valid(now.F, now.S))table[cnt] = false;
			else table[cnt] = (st.find(now) != st.end());
			cnt++;
		}
	}

	cnt = 0;
	repp(dy, -2, 1) {
		repp(dx, -2, 1) {
			if (!valid(y + dy, x + dx) || !valid(y + dy + 2, x + dx + 2))continue;
			PI tres = count_black(dy + 2, dx + 2);
			//p5(y, x, dy, dx, tres.S);
			if (tres.F == 0)continue;
			//p5(y, x, dy, dx, tres.S);
			res[tres.S] ++;
			res[0] --;
		}
	}
}

int main() {
	cin >> h >> w >> n;
	rin{
		li a, b;
		cin >> a >> b;
		a--;
		b--;
		st.insert({a, b});
	}
	rep(i, 10)res[i] = 0;
	res[0] = (h - 2) * (w - 2);

	foreach (it, st) {
		check(it->F, it->S);
	}

	rep(i, 10) {
		cout << res[i] << endl;
	}


	return 0;
}

Measured memory_bytes: 6528