#include #include #include using namespace std; int get_real_val(int val, int idx, size_t len) { return val - (len-idx-1); } int bisect_right(vector& a, int x) { int lo = 0; int hi = a.size(); while (lo < hi) { int mid = (lo + hi) / 2; if (x < get_real_val(a[mid], mid, a.size())) { lo = mid + 1; } else { hi = mid; } } return a.size()-lo-1; } int main(void) { int N, M, Q; cin >> N >> M >> Q; //cout << N << M << Q << endl; vector> piles(M); // scanf("%d %d %d", &N, &M, &Q); for (int i =0; i < N; ++i) { string line; cin >> line; for (int j = 0; j < M; ++j) { if (line[j] == '*') { int time_to_fall = N-i-1; piles[j].push_back(time_to_fall); //cout << time_to_fall << endl; //piles } } //cout << "meme" << endl; } //cout << "loolk" << endl; for (int i = 0; i < Q; ++i) { int time; cin >> time; int total_snowflakes = 0; for (int j = 0; j < M; ++j) { total_snowflakes += bisect_right(piles[j], time) + 1; } cout << total_snowflakes << endl; } }