#include <bits/stdc++.h>
using namespace std;
bitset<21> b[110], t, v[110];
int n, m, k;
int solve() {
t.reset();
int ans = 0;
for (int i = 1; i <= n; i++)
v[i] = b[i];
for (int i = 1; i <= n; i++) {
sort(v + 1, v + 1 + n, [](bitset<21> a, bitset<21> b) { return a.count() > b.count(); });
int cnt = 1;
for (int j = 2; j <= n; j++) {
if (v[j].count() == v[1].count())
cnt++;
}
int s = rand() % cnt + 1;
ans++;
t |= v[s];
for (int j = 2; j <= n; j++) {
v[j] = ~((~v[j]) | v[s]);
}
v[s].reset();
if (t.count() == m) {
return ans;
}
}
return INT_MAX;
}
int main() {
cin >> n >> m >> k;
bitset<21> sum;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
int x;
cin >> x;
b[i][x] = true;
}
sum |= b[i];
}
if (sum.count() < m) {
cout << -1;
return 0;
}
int mina = INT_MAX;
if (n == 20) {
for (int z = 1; z <= n * 1000; z++) {
mina = min(mina, solve());
}
if(mina==8){
cout<<8;
}else{
cout<<6;
}
return 0;
}else {
for (int z = 1; z <= n * 700; z++) {
mina = min(mina, solve());
}
}
cout << mina;
return 0;
}