import java.io.*;
import java.util.*;
public class Main {
int t
= Integer.
parseInt(in.
readLine().
trim()); while (t-- > 0) {
int n
= Integer.
parseInt(st.
nextToken()); int m
= Integer.
parseInt(st.
nextToken()); int k
= Integer.
parseInt(st.
nextToken()); char[][] grid = new char[n][m];
for (int i = 0; i < n; i++) {
grid[i] = in.readLine().toCharArray();
}
out.println(solve(n, m, k, grid));
}
out.flush();
}
private static int solve(int n, int m, int k, char[][] g) {
boolean[] rowHasEmpty = buildRowHasEmpty(n, m, g);
boolean[] colHasEmpty = buildColHasEmpty(n, m, g);
boolean[] rowPref = buildPrefix(rowHasEmpty);
boolean[] rowSuf = buildSuffix(rowHasEmpty);
boolean[] colPref = buildPrefix(colHasEmpty);
boolean[] colSuf = buildSuffix(colHasEmpty);
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (g[i][j] == 'g' && isCollectable(i, j, n, m, k, rowPref, rowSuf, colPref, colSuf)) {
ans++;
}
}
}
return ans;
}
private static boolean[] buildRowHasEmpty(int n, int m, char[][] g) {
boolean[] rowE = new boolean[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (g[i][j] == '.') { rowE[i] = true; break; }
}
}
return rowE;
}
private static boolean[] buildColHasEmpty(int n, int m, char[][] g) {
boolean[] colE = new boolean[m];
for (int j = 0; j < m; j++) {
for (int i = 0; i < n; i++) {
if (g[i][j] == '.') { colE[j] = true; break; }
}
}
return colE;
}
private static boolean[] buildPrefix(boolean[] arr) {
int len = arr.length;
boolean[] pre = new boolean[len];
pre[0] = arr[0];
for (int i = 1; i < len; i++) {
pre[i] = pre[i-1] | arr[i];
}
return pre;
}
private static boolean[] buildSuffix(boolean[] arr) {
int len = arr.length;
boolean[] suf = new boolean[len];
suf[len-1] = arr[len-1];
for (int i = len-2; i >= 0; i--) {
suf[i] = suf[i+1] | arr[i];
}
return suf;
}
private static boolean isCollectable(int i, int j, int n, int m, int k,
boolean[] rowPre, boolean[] rowSuf,
boolean[] colPre, boolean[] colSuf) {
if (i - k >= 0 && rowPre[i - k]) return true;
if (i + k < n && rowSuf[i + k]) return true;
if (j - k >= 0 && colPre[j - k]) return true;
if (j + k < m && colSuf[j + k]) return true;
return false;
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpOwogICAgICAgIGludCB0ID0gSW50ZWdlci5wYXJzZUludChpbi5yZWFkTGluZSgpLnRyaW0oKSk7CiAgICAgICAgd2hpbGUgKHQtLSA+IDApIHsKICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihpbi5yZWFkTGluZSgpKTsKICAgICAgICAgICAgaW50IG4gPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKICAgICAgICAgICAgaW50IG0gPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKICAgICAgICAgICAgaW50IGsgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKICAgICAgICAgICAgY2hhcltdW10gZ3JpZCA9IG5ldyBjaGFyW25dW21dOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgZ3JpZFtpXSA9IGluLnJlYWRMaW5lKCkudG9DaGFyQXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvdXQucHJpbnRsbihzb2x2ZShuLCBtLCBrLCBncmlkKSk7CiAgICAgICAgfQogICAgICAgIG91dC5mbHVzaCgpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGludCBzb2x2ZShpbnQgbiwgaW50IG0sIGludCBrLCBjaGFyW11bXSBnKSB7CiAgICAgICAgYm9vbGVhbltdIHJvd0hhc0VtcHR5ID0gYnVpbGRSb3dIYXNFbXB0eShuLCBtLCBnKTsKICAgICAgICBib29sZWFuW10gY29sSGFzRW1wdHkgPSBidWlsZENvbEhhc0VtcHR5KG4sIG0sIGcpOwogICAgICAgIGJvb2xlYW5bXSByb3dQcmVmID0gYnVpbGRQcmVmaXgocm93SGFzRW1wdHkpOwogICAgICAgIGJvb2xlYW5bXSByb3dTdWYgID0gYnVpbGRTdWZmaXgocm93SGFzRW1wdHkpOwogICAgICAgIGJvb2xlYW5bXSBjb2xQcmVmID0gYnVpbGRQcmVmaXgoY29sSGFzRW1wdHkpOwogICAgICAgIGJvb2xlYW5bXSBjb2xTdWYgID0gYnVpbGRTdWZmaXgoY29sSGFzRW1wdHkpOwoKICAgICAgICBpbnQgYW5zID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewogICAgICAgICAgICAgICAgaWYgKGdbaV1bal0gPT0gJ2cnICYmIGlzQ29sbGVjdGFibGUoaSwgaiwgbiwgbSwgaywgcm93UHJlZiwgcm93U3VmLCBjb2xQcmVmLCBjb2xTdWYpKSB7CiAgICAgICAgICAgICAgICAgICAgYW5zKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuW10gYnVpbGRSb3dIYXNFbXB0eShpbnQgbiwgaW50IG0sIGNoYXJbXVtdIGcpIHsKICAgICAgICBib29sZWFuW10gcm93RSA9IG5ldyBib29sZWFuW25dOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZiAoZ1tpXVtqXSA9PSAnLicpIHsgcm93RVtpXSA9IHRydWU7IGJyZWFrOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd0U7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbltdIGJ1aWxkQ29sSGFzRW1wdHkoaW50IG4sIGludCBtLCBjaGFyW11bXSBnKSB7CiAgICAgICAgYm9vbGVhbltdIGNvbEUgPSBuZXcgYm9vbGVhblttXTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGdbaV1bal0gPT0gJy4nKSB7IGNvbEVbal0gPSB0cnVlOyBicmVhazsgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb2xFOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW5bXSBidWlsZFByZWZpeChib29sZWFuW10gYXJyKSB7CiAgICAgICAgaW50IGxlbiA9IGFyci5sZW5ndGg7CiAgICAgICAgYm9vbGVhbltdIHByZSA9IG5ldyBib29sZWFuW2xlbl07CiAgICAgICAgcHJlWzBdID0gYXJyWzBdOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgcHJlW2ldID0gcHJlW2ktMV0gfCBhcnJbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcmU7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbltdIGJ1aWxkU3VmZml4KGJvb2xlYW5bXSBhcnIpIHsKICAgICAgICBpbnQgbGVuID0gYXJyLmxlbmd0aDsKICAgICAgICBib29sZWFuW10gc3VmID0gbmV3IGJvb2xlYW5bbGVuXTsKICAgICAgICBzdWZbbGVuLTFdID0gYXJyW2xlbi0xXTsKICAgICAgICBmb3IgKGludCBpID0gbGVuLTI7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIHN1ZltpXSA9IHN1ZltpKzFdIHwgYXJyW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3VmOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDb2xsZWN0YWJsZShpbnQgaSwgaW50IGosIGludCBuLCBpbnQgbSwgaW50IGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbltdIHJvd1ByZSwgYm9vbGVhbltdIHJvd1N1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuW10gY29sUHJlLCBib29sZWFuW10gY29sU3VmKSB7CiAgICAgICAgaWYgKGkgLSBrID49IDAgJiYgcm93UHJlW2kgLSBrXSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKGkgKyBrIDwgIG4gJiYgcm93U3VmW2kgKyBrXSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKGogLSBrID49IDAgJiYgY29sUHJlW2ogLSBrXSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKGogKyBrIDwgIG0gJiYgY29sU3VmW2ogKyBrXSkgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==