#include <bits/stdc++.h>   using namespace std;   struct Node {     pair<int, int> A;     int x, y;     Node() {}     Node(pair<int, int> A, int x, int y) {       this->A = A;       this->x = x;       this->y = y;     }   };   char s[1001][1001];   int sp[10], cur, ans[10];   Node heap[1000001];   void swap(Node& a, Node& b) {     Node t = a;     a = b;     b = t;   }   bool cmp(Node a, Node b) {     int val_a = a.A.first / sp[a.A.second];     int val_b = b.A.first / sp[b.A.second];     if (val_a != val_b)       return val_a < val_b;     else if (a.A.second != b.A.second)       return a.A.second < b.A.second;     else       return a.A.first < b.A.first;   }   void push(Node x) {     int now = cur++;     heap[now] = x;     while (now > 1) {       int par = now / 2;       if (cmp(heap[now], heap[par]))         swap(heap[now], heap[par]);       else         break;       now = par;     }     return;   }   Node pop() {     Node ret = heap[1];     heap[1] = heap[--cur];     int now = 1;     while (now * 2 < cur) {       int l = now * 2, r = now * 2 + 1, t;       if (r == cur) r = l;       if (cmp(heap[l], heap[r]))         t = l;       else         t = r;       if (cmp(heap[t], heap[now]))         swap(heap[t], heap[now]);       else         break;       now = t;     }     return ret;   }   int dx[4] = {1, 0, 0, -1};   int dy[4] = {0, 1, -1, 0};   int main() {     int n, m, p;     cur = 1;     scanf( %d %d %d , &n, &m, &p);     for (int i = 1; i <= p; i++) scanf( %d , &sp[i]);     for (int i = 0; i < n; i++) scanf( %s , s[i]);     for (int i = 0; i < n; i++)       for (int j = 0; j < m; j++) {         if (s[i][j] >=  0  && s[i][j] <=  9 ) {           push(Node(pair<int, int>(0, s[i][j] -  0 ), i, j));         }       }     while (cur > 1) {       Node now = pop();       pair<int, int> A = now.A;       int x = now.x, y = now.y;       int cnt = A.first, who = A.second;       for (int i = 0; i < 4; i++) {         int nx = x + dx[i], ny = y + dy[i];         if (nx < 0 || ny < 0 || nx >= n || ny >= m || s[nx][ny] !=  . ) continue;         s[nx][ny] =  0  + who;         push(Node(pair<int, int>(cnt + 1, who), nx, ny));       }     }     for (int i = 0; i < n; i++)       for (int j = 0; j < m; j++) {         if (s[i][j] >=  0  && s[i][j] <=  9 ) {           ans[s[i][j] -  0 ]++;         }       }     for (int i = 1; i <= p; i++) printf( %d  , ans[i]);     return 0;   }   