#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ld long double
#define all(x) begin(x), end(x)
#define inf (int)3e18
#define ff first
#define ss second
#define mem(x, y) fill(begin(x), end(x), y)
using vi = vector<int>;
using vii = vector<pair<int, int>>;
using vvi = vector<vector<int>>;
using pii = pair<int, int>;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
const int MAX = 2e5 + 5, MOD = 1e9 + 7;
int n, m, k, ans1 = 0, ans2 = 0, ans3 = 0;
vector<string> vt;
void solve()
{
cin >> n >> m >> k;
int cnt = 0;
for (int i = 1; i <= n * m; i++)
{
string x;
cin >> x;
cnt++;
if (cnt == m)
{
vt.push_back(x);
cnt = 0;
}
}
// for (auto i : vt)
// cout << i << ' ';
// cout << endl;
for (int i = 3; i < vt.size(); i += 4)
{
string l1, l2, l3, l4;
string t = vt[i - 3];
reverse(all(t));
if (t.size() < k)
continue;
for (int j = 0; j < k; j++)
l1 += t[j];
t = vt[i - 2];
reverse(all(t));
if (t.size() < k)
continue;
for (int j = 0; j < k; j++)
l2 += t[j];
t = vt[i - 1];
reverse(all(t));
if (t.size() < k)
continue;
for (int j = 0; j < k; j++)
l3 += t[j];
t = vt[i];
reverse(all(t));
if (t.size() < k)
continue;
for (int j = 0; j < k; j++)
l4 += t[j];
// cout << l1 << ' ' << l2 << ' ' << l3 << ' ' << l4 << endl;
if (l1 == l2 && l3 == l4)
ans1++;
if (l1 == l3 && l2 == l4)
ans2++;
if (l1 == l4 && l2 == l3)
ans3++;
}
cout << ans1 << ' ' << ans2 << ' ' << ans3;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int tt = 1;
// cin >> tt;
while (tt--)
solve();
}