// Slower C++ solution:
/*  ***  In The Name of God ... ***  */ 

#include <bits/stdc++.h>

 

using namespace std;

 

typedef long long ll;

typedef long double ld;

 

 

#define int long long

#define all(v) v.begin() , v.end()



template<typename T> inline bool smin(T &a, const T &b){ return b < a ? a = b,1:0;}

template<typename T> inline bool smax(T &a, const T &b){ return a < b ? a = b,1:0;}



int n , m , q , res [ 10 ] ;

map < pair < int , int > , bool > mark ;

vector < pair < int , int > > vc ; 



bool val ( int x , int y ) {

	return x > 0 && y > 0 && x <= n && y <= m ; 

}



void add ( int x , int y ) {

	bool isok = 1 ; 

	int cnt = 0 ; 

	for ( int i = x ; i <= x + 2 ; ++ i ) {

		for ( int j = y ; j <= y + 2 ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ; 

	for ( int i = x - 1 ; i <= x + 1 ; ++ i ) {

		for ( int j = y ; j <= y + 2 ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	} 

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ;

	for ( int i = x - 2 ; i <= x  ; ++ i ) {

		for ( int j = y ; j <= y + 2 ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ;

	for ( int i = x ; i <= x + 2 ; ++ i ) {

		for ( int j = y - 1 ; j <= y + 1 ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ;

	for ( int i = x - 1 ; i <= x + 1 ; ++ i ) {

		for ( int j = y - 1 ; j <= y + 1 ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ; 

	for ( int i = x - 2 ; i <= x ; ++ i ) {

		for ( int j = y - 1 ; j <= y + 1 ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ;

	for ( int i = x ; i <= x + 2 ; ++ i ) {

		for ( int j = y - 2 ; j <= y ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ;

	for ( int i = x - 1 ; i <= x + 1 ; ++ i ) {

		for ( int j = y - 2 ; j <= y ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ;

	isok = 1 , cnt = 0 ;

	for ( int i = x - 2 ; i <= x ; ++ i ) {

		for ( int j = y - 2 ; j <= y ; ++ j ) {

			isok &= val ( i , j ) ;

			cnt += mark [ { i , j } ] ; 

		}

	}

	if ( isok )

		++ res [ cnt ] ; 

}



int32_t main()

{

	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	cin >> n >> m >> q ;

	while ( q -- ) {

		int a , b ;

		cin >> a >> b ;

		vc . push_back ( { a , b } ) ;

		mark [ { a , b } ] = 1 ; 

	}

	for ( auto e : vc )

		add ( e . first , e . second ) ;

	int All = ( n - 2 ) * ( m - 2 ) ;

	for ( int i = 1 ; i < 10 ; ++ i ) {

		res [ i ] /= i ;

		All -= res [ i ] ; 

	}

	cout << All << '\n' ;

	for ( int i = 1 ; i < 10 ; ++ i )

		cout << res [ i ] << '\n' ; 

	cout << '\n' ; 

}




// Faster C++ solution for the same problem (measured speedup: 1.1121235746531124x):
#include<bits/stdc++.h>

#define int long long

using namespace std;

int vc=1000000007;

int h,w,n;

int node[1000010];

int a,b;

int cnt=0,z;

int ans[11];

signed main(){

	cin>>h>>w>>n;

	z=(h-2)*(w-2);

	while(n--){

		cin>>a>>b;

		for (int i=-2;i<=0;i++){

			for (int j=-2;j<=0;j++){

				if(a+i>=1&&a+i<=h-2&&b+j>=1&&b+j<=w-2){

					node[cnt++]=vc*(a+i)+(b+j);

				}

			}

		}

	}

	sort(node,node+cnt);

	for (int i=0,t=1;i<cnt;i++){

		if(node[i]==node[i+1])	t++;

		else{

			ans[t]++;

			z--;

			t=1;

		}	

	}

	cout<<z<<"\n";

	for (int i=1;i<10;i++)	cout<<ans[i]<<"\n";

}