#include #include #include #include using namespace std; int main() { int n, m, q; cin >> n >> m >> q; vector t; string s; vector array; for (size_t i = 0; i < n; i++) { cin >> s; array.push_back(s); } for (size_t i = 0; i < q; i++) { int x; cin >> x; t.push_back(x); } vector> grid(n, vector(m)); for (size_t j = 0; j < m; j++) { int snowflake = 0; int empty = 0; for (int i = n - 1; i >= 0; i--) { char c = array[i][j]; if (c == '*') { empty = 0; if (i == n - 1) { grid[i][j] = 0; } else { if (array[i + 1][j] == '*') { grid[i][j] = snowflake; } else { grid[i][j] = snowflake - grid[i + 1][j]; snowflake = grid[i][j]; } } } else { --empty; grid[i][j] = empty; } } } vector snow; for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < m; j++) { if (grid[i][j] >= 0) { snow.push_back(grid[i][j]); } } } sort(snow.begin(), snow.end()); vector answer; for (size_t i = 0; i < t.size(); i++) { if (snow.size() == 0) { answer.push_back(0); continue; } auto x = upper_bound(snow.begin(), snow.end(), t[i]); if (x == snow.end()) { if (snow[snow.size() - 1] <= t[i]) { answer.push_back(snow.size()); } } else { int size = x - snow.begin(); answer.push_back(size); } } for (size_t i = 0; i < t.size(); i++) { cout << answer[i] << endl; } }