#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds; // needed for tree + PBDS
#define pb push_back
#define all(x) x.begin(), x.end()
typedef long long ll;
const ll INF = (ll)1e18;
const ll MOD = 1000000000+7 ;
const double eps = 1e-9 ;
template <class T>
using ordered_set = tree<
T,
null_type,
less<T>,
rb_tree_tag,
tree_order_statistics_node_update
>;
int n , m ;
bool valid (int i , int j) {
return i >= 0 && i < n && j >= 0 && j < m ;
}
void solve() {
int k ; cin >> n >> m >> k ;
vector < vector< char > > matrix(n , vector < char >(m , '.')) ;
ll cnt = 0 ;
for (int i = 0 ; i <n ; i ++ ) {
for (int j=0 ; j< m ; j ++) {
cin >> matrix[i][j] ;
if (matrix[i][j] =='g')cnt ++ ;
}
}
ll mini = n*m;
vector < vector < ll > > prefixgold(n,vector < ll > (m , 0 )) ;
for (int i = 0 ; i< n ; i ++) {
for (int j = 0 ; j <m ; j ++ ) {
prefixgold[i][j] = (matrix[i][j ] == 'g') ;
if (valid(i , j -1 ) ) prefixgold[i][j] +=prefixgold[i][j-1] ;
if (valid(i-1 , j ) ) prefixgold[i][j] +=prefixgold[i-1][j] ;
if (valid(i-1 , j -1 ) ) prefixgold[i][j] -=prefixgold[i-1][j-1] ;
}
}
for (int i = 0 ; i < n ; i ++ ) {
for (int j = 0 ; j < m ; j ++ ) {
ll loss= 0 ;
if (matrix[i][j] != '.')continue ;
int begini= max(0 , i-k+1) , endi = min (i + k-1 , n -1 ), beginj= max(0 , j-k+1) , endj = min (j + k-1 , m -1 );
loss = prefixgold[endi][endj] ;
if (valid (begini -1 , endj )) loss-=prefixgold[begini-1][endj] ;
if (valid (endi , beginj-1 )) loss-=prefixgold[endi][beginj-1] ;
if (valid (begini-1 , beginj-1 )) loss+=prefixgold[begini-1][beginj-1] ;
// cout << i <<" " << j << " " << loss << endl ;
mini = min( loss , mini ) ;
}
}
cout << cnt- mini << endl ;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1 ; cin >> t;
int maxi = 200000 + 5;
while (t--) solve();
return 0;
}
ICAgICNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsgICAvLyBuZWVkZWQgZm9yIHRyZWUgKyBQQkRTCgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGxsIElORiA9IChsbCkxZTE4Owpjb25zdCBsbCBNT0QgPSAxMDAwMDAwMDAwKzcgOwpjb25zdCBkb3VibGUgZXBzID0gMWUtOSA7CnRlbXBsYXRlIDxjbGFzcyBUPgp1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8CiAgICBULAogICAgbnVsbF90eXBlLAogICAgbGVzczxUPiwKICAgIHJiX3RyZWVfdGFnLAogICAgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlCj47CmludCBuICwgbSA7CmJvb2wgdmFsaWQgKGludCAgaSAsIGludCBqKSB7CiAgICByZXR1cm4gIGkgPj0gMCAmJiBpIDwgbiAmJiBqICA+PSAwICYmIGogPCBtICAgOwp9CnZvaWQgc29sdmUoKSB7CgogICAgaW50ICAgayA7IGNpbiA+PiBuID4+IG0gPj4gayA7CiAgICB2ZWN0b3IgPCB2ZWN0b3I8IGNoYXIgPiA+IG1hdHJpeChuICwgdmVjdG9yIDwgY2hhciA+KG0gLCAnLicpKSA7CiAgICBsbCBjbnQgPSAwIDsKICAgIGZvciAoaW50ICBpID0gMCA7IGkgPG4gIDsgaSArKyApIHsKICAgICAgICBmb3IgKGludCAgaj0wIDsgajwgbSA7IGogKyspIHsKICAgICAgICAgICAgY2luID4+IG1hdHJpeFtpXVtqXSA7CiAgICAgICAgICAgIGlmIChtYXRyaXhbaV1bal0gPT0nZycpY250ICsrIDsKICAgICAgICB9CiAgICB9CiAgICBsbCBtaW5pID0gbiptOwogICAgdmVjdG9yIDwgIHZlY3RvciA8IGxsICA+ID4gcHJlZml4Z29sZChuLHZlY3RvciA8IGxsICA+IChtICwgMCApKSAgIDsKICAgIGZvciAoaW50IGkgPSAwIDsgaTwgbiA7IGkgKyspIHsKICAgICAgICBmb3IgKGludCAgaiA9IDAgOyBqICA8bSAgOyBqICsrICkgewogICAgICAgICAgICBwcmVmaXhnb2xkW2ldW2pdICA9IChtYXRyaXhbaV1baiBdID09ICdnJykgOwogICAgICAgICAgICBpZiAodmFsaWQoaSAsIGogLTEgKSApIHByZWZpeGdvbGRbaV1bal0gKz1wcmVmaXhnb2xkW2ldW2otMV0gOwogICAgICAgICAgICBpZiAodmFsaWQoaS0xICwgaiAgKSApIHByZWZpeGdvbGRbaV1bal0gKz1wcmVmaXhnb2xkW2ktMV1bal0gOwogICAgICAgICAgICBpZiAodmFsaWQoaS0xICwgaiAtMSApICkgcHJlZml4Z29sZFtpXVtqXSAtPXByZWZpeGdvbGRbaS0xXVtqLTFdIDsKICAgICAgICB9CiAgICB9CgoKICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG4gOyBpICsrICkgewogICAgICAgIGZvciAoaW50IGogPSAwIDsgaiA8IG0gIDsgaiArKyApIHsKICAgICAgICAgICAgbGwgbG9zcz0gMCA7CiAgICAgICAgICAgIGlmIChtYXRyaXhbaV1bal0gIT0gJy4nKWNvbnRpbnVlIDsKICAgICAgICAgICAgaW50IGJlZ2luaT0gbWF4KDAgLCBpLWsrMSkgICwgZW5kaSA9IG1pbiAoaSArIGstMSAsIG4gLTEgKSwgIGJlZ2luaj0gbWF4KDAgLCBqLWsrMSkgICwgZW5kaiA9IG1pbiAoaiArIGstMSAsIG0gLTEgKTsKICAgICAgICAgICBsb3NzID0gcHJlZml4Z29sZFtlbmRpXVtlbmRqXSA7CiAgICAgICAgICAgIGlmICh2YWxpZCAoYmVnaW5pIC0xICwgZW5kaiApKSBsb3NzLT1wcmVmaXhnb2xkW2JlZ2luaS0xXVtlbmRqXSA7CiAgICAgICAgICAgIGlmICh2YWxpZCAoZW5kaSAsIGJlZ2luai0xICkpIGxvc3MtPXByZWZpeGdvbGRbZW5kaV1bYmVnaW5qLTFdIDsKICAgICAgICAgICAgaWYgKHZhbGlkIChiZWdpbmktMSAsIGJlZ2luai0xICkpIGxvc3MrPXByZWZpeGdvbGRbYmVnaW5pLTFdW2JlZ2luai0xXSA7CgogICAgICAgICAgLy8gIGNvdXQgPDwgaSA8PCIgIiA8PCBqIDw8ICIgIiA8PCBsb3NzIDw8IGVuZGwgOwogICAgICAgICAgICBtaW5pID0gbWluKCBsb3NzICwgbWluaSApIDsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IGNudC0gbWluaSA8PCBlbmRsIDsKCgp9CgoKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCiAgICBpbnQgdCA9IDEgOyAgY2luID4+IHQ7CiAgICBpbnQgbWF4aSA9IDIwMDAwMCArIDU7CgogICAgd2hpbGUgKHQtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9