#include <iostream>
#include <unordered_set>
using namespace std;
const int N = 7;
int n, m, k;
int num[N][N];
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
unordered_set<int> dfs(int x, int y, int c)
{
unordered_set<int> S;
int val = num[x][y];
for (int i = 0; i < c - 1; ++i) val *= 10;
if (c == 1) S.insert(val);
else for (int i = 0; i < 4; ++i)
{
int a = x + dx[i], b = y + dy[i];
if (a < 0 || a >= n || b < 0 || b >= m) continue;
auto s = dfs(a, b, c - 1);
for (auto &t : s)
S.insert(val + t);
}
return S;
}
int main()
{
cin >> n >> m >> k;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
cin >> num[i][j];
unordered_set<int> S;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
{
auto s = dfs(i, j, k + 1);
for (auto &x : s)
S.insert(x);
}
cout << S.size() << endl;
return 0;
}
#include <iostream>
#include <unordered_set>
using namespace std;
const int N = 7;
int n, m, k;
int num[N][N];
unordered_set<int> S;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
void dfs(int x, int y, int c, int val)
{
if (c == k) S.insert(val);
else for (int i = 0; i < 4; ++i)
{
int a = x + dx[i], b = y + dy[i];
if (a < 0 || a >= n || b < 0 || b >= m) continue;
dfs(a, b, c + 1, val * 10 + num[a][b]);
}
}
int main()
{
cin >> n >> m >> k;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
cin >> num[i][j];
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
dfs(i, j, 0, num[i][j]);
cout << S.size() << endl;
return 0;
}