//*******************************************************ランダムなもの***********************************************************************
// double num1 = 3.12345678; cout << fixed << showpoll; cout << setprecision(9); cout << num1 << endl; prllf("%0.9lf \n", side); for double
// struct foo{ ll a,b,c; }; typedef struct foo foo;
// typedef pair<ll, ll> pi; 
// struct Compare{ bool operator()(pi const & a, pi const & b){ if(a.first==b.first){ return a.second>b.second; } return a.first<b.first; } };
// priority_queue<pi , vector<pi>, Compare> pq; priority_queue <ll, vector<ll>, greater<ll> > pq; # Min Heap
// for(ll i=1;i<=m+1;i++) f[i]=(f[i-1]%mod * i%mod)%mod; mcn = (f[m]%mod * power(f[n],mod-2,mod)%mod * power(f[m-n],mod-2,mod)%mod)%mod;
// void bfs(ll i){ queue<pair<ll,ll>> q; q.push(mp(i,0)); vis[i]=1;
// while(!q.empty()) { pair<ll,ll> temp=q.front(); q.pop(); d[i][temp.first]=temp.second;
// for(auto it=g[temp.first].begin();it!=g[temp.first].end();it++) {if(vis[*it]==0){vis[*it]=1; q.push(mp(*it,(temp.second)+1));}}}}
// void dfs(ll child,ll parent,vector<ll> &d,vector<ll> &p,ll &tx,vector<ll> &tin,vector<ll> &tout) { tin[child]=tx++;
// for(auto it = g[child].begin();it!=g[child].end();it++) { if(*it==parent) continue;
// d[*it]=1+d[child]; p[*it]=child; dfs(*it,child,d,p,tx,tin,tout);} tout[child]=tx++; }
//**********************************************************数や******************************************************************************
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back
#define endl '\n'
#define PI 3.14159265
#define ff first
#define ss second
#define tab '\t'
#define deb cout<<"error"<<endl
#define uset unordered_set
#define mset multiset
#define umap unordered_map
#define mmap multimap
#define len length
#define siz(x) (ll)(x).size()
#define nbits(d) (ll)log2(d)+1
// struct chash { static ull64_t splitmix64(ull64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
// x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31);}
// size_t operator()(ull64_t x) const { static const ull64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
// return splitmix64(x + FIXED_RANDOM);} };
ll gcd (ll a, ll b){ if(b==0) return a; else return gcd(b,a%b); }
ll power(ll a, ll n){ ll res=1; while(n!=0) { if(n%2){ res=res*a; n--; } else { a=a*a; n=n/2; } } return res;}
ll powermod(ll a, ll n, ll m){ ll res=1; while(n!=0) { if(n%2){ res=(res%m*a%m)%m; n--; } else { a=(a%m*a%m)%m; n=n/2; } } return res%m;}
/*Any ll overflow ? Inside while loop < n, okay ? ! Multiple GRAPHS in testcases ? Reinitialize global ! End cases n=0 || n=1 ?
CHECK IF your 'IF' 'ELSE' are correct or not !!!!!!!!!!!!!!!!!!!!!!!!
*Do and write something insted of nothin okay?! * これらのコードの作成者 - ビベックシャルマ */

map<pair<pair<ll,ll>,pair<ll,ll>>,ll> m;
ll h,w,n;

void fun(ll y,ll x)
{
    ll ax1 = x-2,  bx1= x;
    ll ay1 = y-2,  by1= y;
    ll ax2 = x-1,  bx2 = x+1;
    ll ay2 = y-2,  by2 = y;
    ll ax3 = x,    bx3 = x+2;
    ll ay3 = y-2,  by3 = y;

    ll ax4 = x-2,  bx4= x;
    ll ay4 = y-2+1,  by4= y+1;
    ll ax5 = x-1,  bx5 = x+1;
    ll ay5 = y-2+1,  by5 = y+1;
    ll ax6 = x,    bx6 = x+2;
    ll ay6 = y-2+1,  by6 = y+1;

    ll ax7 = x-2,  bx7= x;
    ll ay7 = y-2+2,  by7= y+2;
    ll ax8 = x-1,  bx8 = x+1;
    ll ay8 = y-2+2,  by8 = y+2;
    ll ax9 = x,    bx9 = x+2;
    ll ay9 = y-2+2,  by9 = y+2;

    if(ax1 >=1 && bx1<=w && ay1 >=1 && by1 <= h)
    {
        m[{{ax1,bx1},{ay1,by1}}]++;
    }

    if(ax2 >=1 && bx2<=w && ay2 >=1 && by2 <= h)
    {
        m[{{ax2,bx2},{ay2,by2}}]++;
    }
    if(ax3 >=1 && bx3<=w && ay3 >=1 && by3 <= h)
    {
        m[{{ax3,bx3},{ay3,by3}}]++;
    }
    if(ax4 >=1 && bx4<=w && ay4 >=1 && by4 <= h)
    {
        m[{{ax4,bx4},{ay4,by4}}]++;
    }
    if(ax5 >=1 && bx5<=w && ay5 >=1 && by5 <= h)
    {
        m[{{ax5,bx5},{ay5,by5}}]++;
    }
    if(ax6 >=1 && bx6<=w && ay6 >=1 && by6 <= h)
    {
        m[{{ax6,bx6},{ay6,by6}}]++;
    }
    if(ax7 >=1 && bx7<=w && ay7 >=1 && by7 <= h)
    {
        m[{{ax7,bx7},{ay7,by7}}]++;
    }
    if(ax8 >=1 && bx8<=w && ay8 >=1 && by8 <= h)
    {
        m[{{ax8,bx8},{ay8,by8}}]++;
    }
    if(ax9 >=1 && bx9<=w && ay9 >=1 && by9 <= h)
    {
        m[{{ax9,bx9},{ay9,by9}}]++;
    }

    // vector< pair < pair<int,int>, pair<int,int> > > v;
    // int a,b;
    // a=y-2,b=y;
    // for(int i=0;i<3;i++)
    // v.pb({{x-2+i,x+i},{a,b}});
    // a=y-1,b=y+1;     
    // for(int i=0;i<3;i++)
    // v.pb({{x-2+i,x+i},{a,b}});
    // a=y,b=y+2;
    // for(int i=0;i<3;i++)
    // v.pb({{x-2+i,x+i},{a,b}});
    // for(int i=0;i<v.size();i++)
    // {
    //     if(v[i].ff.ff >=1 && v[i].ff.ss <= w && v[i].ss.ff >=1 && v[i].ss.ss <= h)
    //     {
    //         cout<<v[i].ff.ff<<" "<<v[i].ff.ss<<" "<<v[i].ss.ff<<" "<<v[i].ss.ss<<endl;
    //         m[{{v[i].ff.ff, v[i].ff.ss},{v[i].ss.ff, v[i].ss.ss}}]++;
    //     }
    // }
}


void jiejue() 
{
    cin>>h>>w>>n;
    vector<pair<ll,ll>> v;
    for(ll i=1;i<=n;i++)
    {
        ll a ,b;
        cin>>a>>b;
        v.pb(mp(a,b));
    }

    for(ll i=0;i<v.size();i++) fun(v[i].ff,v[i].ss);
    vector<ll> f(10,0);
    for(auto it = m.begin();it!=m.end();it++) 
    {
        f[it->ss]++;
    }
    f[0] = (w-2)*(h-2) - m.size();  
    for(ll i=0;i<10;i++) cout<<f[i]<<endl;

    // for(auto it  = m.begin();it!=m.end();it++)
    // cout<<it->ff.ff.ff<<" "<<it->ff.ff.ss<<" "<<it->ff.ss.ff<<" "<<it->ff.ss.ss<<" "<<it->ss<<endl;

}

signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ll teseuteu;
teseuteu=1; while(teseuteu--) jiejue();
// cin>>teseuteu; while(teseuteu--) jiejue();
}


Measured memory_bytes: 75020