// Original C++ solution (slower):
#include <algorithm>

#include <iterator>

#include <iostream>

//#include <iomanip>

//#include <cstring>

//#include <cstdlib>

#include <string>

#include <vector>

//#include <queue>

//#include <cmath>

//#include <set>

#include <map>

using namespace std;

#ifdef LOCAL

#define DEBUGMSG()                                                              \

{                                                                               \

    cerr << "[调试 @" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "]" ;        \

}

#define DEBUGVAR(x)                                                             \

{                                                                               \

    cerr << "[调试 @" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "]:" ;       \

    cerr << "([" << typeid(x).name() << "]" << #x << ")" << x << endl ;         \

}

#define DEBUGARR(l, r)                                                          \

{                                                                               \

    cerr << "[调试 @" << __PRETTY_FUNCTION__ << ":" << __LINE__ << "]:" ;       \

    copy(l, r, ostream_iterator<decltype(*l)>(cerr, " "));                      \

    cerr << endl ;                                                              \

}

#else

#define DEBUGMSG()

#define DEBUGVAR(x)

#define DEBUGARR(l, r)

#endif // LOCAL



typedef long long i64;

int H, W, N;

i64 empt, ans[11];

map <pair<int, int>, int> mp;



int main()

{

    int u, v;

    cin >> H >> W >> N ;

    empt = 1LL * (H - 2) * (W - 2);

    while(N--)

    {

        cin >> u >> v ;

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

        {

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

            {

                if(u + i < 1 || u + i > H)

                    continue;

                if(v + j < 1 || v + j > W)

                    continue;

                mp[make_pair(u+i, v+j)]++;

            }

        }

    }



    for(auto itr = mp.begin(); itr != mp.end(); itr++)

    {

        if(itr->first.first <= 1 || itr->first.first >= H)

            continue;

        if(itr->first.second <= 1 || itr->first.second >= W)

            continue;

        cerr << itr->first.first << " " << itr->first.second << " " << itr->second << endl ;

        ans[itr->second]++;

        empt--;

    }



    cout << empt << endl ;

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

        cout << ans[i] << endl ;



}




// Optimized solution to the same problem (faster):
#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

#define ll long long

int H,W,N;

ll arr[1000005];

ll ans[10];

ll d=1e9+7;

int main()

{

    scanf("%d%d%d",&H,&W,&N);

    int x,y;

    int xx,yy;

    int count=0;

    for(int i=0;i<N;i++)

    {

       scanf("%d%d",&x,&y);

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

       {

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

           {

               xx=x+i;

               yy=y+j;

               if(xx>1&&xx<H&&yy>1&&yy<W)

                    arr[count++]=xx*d+yy;

           }

       }

    }

    sort(arr,arr+count);

    int c=1;

    ll z=(ll)(H-2)*(ll)(W-2);

    memset(ans,0,sizeof(ans));

    for(int i=0;i<count;i++)

    {

        if(arr[i]==arr[i+1])

            c++;

        else

        {

            z--;

            ans[c]++;

            c=1;

        }

    }

    printf("%lld\n",z);

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

        printf("%lld\n",ans[i]);

    return 0;

}


// Fastest known solution for this problem: