/*
  mail: mleautomaton@foxmail.com
  author: MLEAutoMaton
  This Code is made by MLEAutoMaton
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define REP(a,b,c) for(int a=b;a<=c;a++)
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi(){
	int f=1,sum=0;char ch=getchar();
	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
	return f*sum;
}
typedef pair<int,int> pii;
#define mp make_pair
set<pii>se;
int h,w,n,ans[20];
struct node{int x,y;}p[100010];
int main(){
	w=gi();h=gi();n=gi();ll all=1ll*(h-2)*(w-2),sum=0;
	for(int i=1;i<=n;i++){
		int u=gi(),v=gi();
		se.insert(mp(v,u));
		p[i]=(node){v,u};
	}
	for(int i=1;i<=n;i++){
		int k,x=p[i].x,y=p[i].y,xx=x,yy=y;
//		printf("%d %d\n",x,y);
		if(yy+2<=w){
			if(xx+2<=h){
				k=0;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x+1,y))!=se.end())k++;
				if(se.find(mp(x+2,y))!=se.end())k++;
				if(se.find(mp(x,y+1))!=se.end())k++;
				if(se.find(mp(x+1,y+1))!=se.end())k++;
				if(se.find(mp(x+2,y+1))!=se.end())k++;
				if(se.find(mp(x,y+2))!=se.end())k++;
				if(se.find(mp(x+1,y+2))!=se.end())k++;
				if(se.find(mp(x+2,y+2))!=se.end())k++;
				ans[k]++;//1
//				printf("1:%d\n",k);
			}
			if(xx>1 && xx<h){
				k=0;
				if(se.find(mp(x-1,y))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x+1,y))!=se.end())k++;
				if(se.find(mp(x-1,y+1))!=se.end())k++;
				if(se.find(mp(x,y+1))!=se.end())k++;
				if(se.find(mp(x+1,y+1))!=se.end())k++;
				if(se.find(mp(x-1,y+2))!=se.end())k++;
				if(se.find(mp(x,y+2))!=se.end())k++;
				if(se.find(mp(x+1,y+2))!=se.end())k++;
				ans[k]++;//2
//				printf("2:%d\n",k);
			}
			if(xx>2){
				k=0;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x-1,y))!=se.end())k++;
				if(se.find(mp(x-2,y))!=se.end())k++;
				if(se.find(mp(x,y+1))!=se.end())k++;
				if(se.find(mp(x-1,y+1))!=se.end())k++;
				if(se.find(mp(x-2,y+1))!=se.end())k++;
				if(se.find(mp(x,y+2))!=se.end())k++;
				if(se.find(mp(x-1,y+2))!=se.end())k++;
				if(se.find(mp(x-2,y+2))!=se.end())k++;
				ans[k]++;//3
//				printf("3:%d\n",k);
			}
		}
		if(1<yy && yy<w){
			if(xx+2<=h){
				k=0;
				if(se.find(mp(x,y-1))!=se.end())k++;
				if(se.find(mp(x+1,y-1))!=se.end())k++;
				if(se.find(mp(x+2,y-1))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x+1,y))!=se.end())k++;
				if(se.find(mp(x+2,y))!=se.end())k++;
				if(se.find(mp(x,y+1))!=se.end())k++;
				if(se.find(mp(x+1,y+1))!=se.end())k++;
				if(se.find(mp(x+2,y+1))!=se.end())k++;
				ans[k]++;//4
//				printf("4:%d\n",k);
			}
			if(1<xx && xx<h){
				k=0;
				if(se.find(mp(x-1,y-1))!=se.end())k++;
				if(se.find(mp(x,y-1))!=se.end())k++;
				if(se.find(mp(x+1,y-1))!=se.end())k++;
				if(se.find(mp(x-1,y))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x+1,y))!=se.end())k++;
				if(se.find(mp(x-1,y+1))!=se.end())k++;
				if(se.find(mp(x,y+1))!=se.end())k++;
				if(se.find(mp(x+1,y+1))!=se.end())k++;
				ans[k]++;//5
//				printf("5:%d\n",k);
			}
			if(xx>2){
				k=0;
				if(se.find(mp(x,y-1))!=se.end())k++;
				if(se.find(mp(x-1,y-1))!=se.end())k++;
				if(se.find(mp(x-2,y-1))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x-1,y))!=se.end())k++;
				if(se.find(mp(x-2,y))!=se.end())k++;
				if(se.find(mp(x,y+1))!=se.end())k++;
				if(se.find(mp(x-1,y+1))!=se.end())k++;
				if(se.find(mp(x-2,y+1))!=se.end())k++;
				ans[k]++;//6
//				printf("6:%d\n",k);
			}
		}
		if(yy>2){
			if(xx+2<=h){
				k=0;
				if(se.find(mp(x,y-2))!=se.end())k++;
				if(se.find(mp(x+1,y-2))!=se.end())k++;
				if(se.find(mp(x+2,y-2))!=se.end())k++;
				if(se.find(mp(x,y-1))!=se.end())k++;
				if(se.find(mp(x+1,y-1))!=se.end())k++;
				if(se.find(mp(x+2,y-1))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x+1,y))!=se.end())k++;
				if(se.find(mp(x+2,y))!=se.end())k++;
				ans[k]++;//7
//				printf("7:%d\n",k);
			}
			if(1<xx && xx<h){
				k=0;
				if(se.find(mp(x-1,y-2))!=se.end())k++;
				if(se.find(mp(x,y-2))!=se.end())k++;
				if(se.find(mp(x+1,y-2))!=se.end())k++;
				if(se.find(mp(x-1,y-1))!=se.end())k++;
				if(se.find(mp(x,y-1))!=se.end())k++;
				if(se.find(mp(x+1,y-1))!=se.end())k++;
				if(se.find(mp(x-1,y))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x+1,y))!=se.end())k++;
				ans[k]++;//8
//				printf("8:%d\n",k);
			}
			if(xx>2){
				k=0;
				if(se.find(mp(x,y-2))!=se.end())k++;
				if(se.find(mp(x-1,y-2))!=se.end())k++;
				if(se.find(mp(x-2,y-2))!=se.end())k++;
				if(se.find(mp(x,y-1))!=se.end())k++;
				if(se.find(mp(x-1,y-1))!=se.end())k++;
				if(se.find(mp(x-2,y-1))!=se.end())k++;
				if(se.find(mp(x,y))!=se.end())k++;
				if(se.find(mp(x-1,y))!=se.end())k++;
				if(se.find(mp(x-2,y))!=se.end())k++;
				ans[k]++;//9
//				printf("9:%d\n",k);
			}
		}
	}
	for(int i=1;i<=9;i++)sum+=ans[i]/i;
//	printf("%lld %lld\n",all,all-sum);
	printf("%lld\n",all-sum);
	for(int i=1;i<=9;i++)printf("%d\n",ans[i]/i);
	return 0;
}
#undef mp


Measured memory_bytes: 5760