#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int main() {
  using lint = long long int;
  using pr = pair<lint, lint>;
  lint h, w;
  cin >> h >> w;
  int n;
  cin >> n;
  vector<pr> cells(n);
  for (int i = 0; i < n; ++i) {
    lint a, b;
    cin >> a >> b;
    cells[i] = make_pair(a, b);
  }
  sort(cells.begin(), cells.end());
  auto is_in = [&](pair<pr, pr> area,pr target)
  {
    return target >= area.first && target <= area.second;
  };
  auto is_valid = [&](pr ij)
  {
    if(ij.first >= 1 && ij.first <= h)
    {
      if(ij.second >= 1 && ij.second <= w)
      {
        return true;
      }
    }
    return false;
  };
  auto generate_area = [&](pr ij)
  {
    ///i, jが入る区画を生成
    vector<pair<pr, pr>> result;
    if(is_valid({ij.first + 2, ij.second + 2}))
    {
      result.push_back({ij, {ij.first + 2, ij.second + 2}});
    }
    if(is_valid({ij.first, ij.second - 1}) && is_valid({ij.first + 2, ij.second + 1}))
    {
      result.push_back({{ij.first, ij.second - 1}, {ij.first + 2, ij.second + 1}});
    }
    if(is_valid({ij.first, ij.second - 2}) && is_valid({ij.first + 2, ij.second}))
    {
     result.push_back({{ij.first, ij.second - 2}, {ij.first + 2, ij.second}});
    }
    if(is_valid({ij.first - 1, ij.second}) && is_valid({ij.first + 1, ij.second + 2}))
    {
     result.push_back({{ij.first - 1, ij.second}, {ij.first + 1, ij.second + 2}});
    }
    if(is_valid({ij.first - 1, ij.second - 1}) && is_valid({ij.first + 1, ij.second + 1}))
    {
     result.push_back({{ij.first - 1, ij.second - 1}, {ij.first + 1, ij.second + 1}});
    }
    if(is_valid({ij.first - 1, ij.second - 2}) && is_valid({ij.first + 1, ij.second}))
    {
     result.push_back({{ij.first - 1, ij.second - 2}, {ij.first + 1, ij.second}});
    }
    if(is_valid({ij.first - 2, ij.second}) && is_valid({ij.first, ij.second + 2}))
    {
     result.push_back({{ij.first - 2, ij.second}, {ij.first, ij.second + 2}});
    }
    if(is_valid({ij.first - 2, ij.second - 1}) && is_valid({ij.first, ij.second + 1}))
    {
     result.push_back({{ij.first - 2, ij.second - 1}, {ij.first, ij.second + 1}});
    }
    if(is_valid({ij.first - 2, ij.second - 2}))
    {
     result.push_back({{ij.first - 2, ij.second - 2}, {ij.first, ij.second}});
    }
    return result;
  };

  ///塗られる区画
  vector<pair<pr, pr>> as;
  for (int i = 0; i < n; ++i) {
    vector<pair<pr, pr>> temp = generate_area(cells[i]);
    for(auto e : temp)
    {
      as.push_back(e);
    }
  }
  sort(as.begin(), as.end());
  as.erase(unique(as.begin(), as.end()), as.end());

  ///各区画の塗られ方
  //vector<vector<vector<int>>> as_v(as.size(), vector<vector<int>>(3, vector<int>(3, 0)));
  vector<int> as_v(as.size(), 0);

  ///indexの保存
  map<pair<pr, pr>, int> info;
  for (int i = 0; i < as.size(); ++i) {
    info[as[i]] = i;
  }

  ///各点について調査
  for (int i = 0; i < n; ++i) {
    vector<pair<pr, pr>> areas;
    areas = generate_area(cells[i]);
    for (int j = 0; j < areas.size(); ++j) {
      int indedx = info[areas[j]];
      ///as_v[indedx][cells[i].first - as[indedx].first.first][cells[i].second - as[indedx].first.second] = 1;
      as_v[indedx]++;
    }
  }
  vector<lint> result(10, 0);
  result[0] = (w - 2) * (h - 2) - as.size();
  for (int i = 0; i < as_v.size(); ++i) {
    /*lint count = 0;
    for (int j = 0; j < 3; ++j) {
      for (int k = 0; k < 3; ++k) {
        if(as_v[i][j][k] == 1) count++;
      }
    }*/
    result[as_v[i]]++;
  }
  for(auto e : result)
  {
    cout << e << endl;
  }
  return 0;
}


Measured memory_bytes: 105056