#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int n, m, k;
vector<int> person[1001];
bool visit[1001];
int work[1001];
void input()
{
int i, cnt, num;
scanf("%d %d %d", &n, &m, &k);
for (i = 1; i <= n; i++) {
scanf("%d", &cnt);
while (cnt--) {
scanf("%d", &num);
person[i].push_back(num);
}
}
}
int dfs(int p)
{
int i, w;
visit[p] = true;
for (i = 0; i < person[p].size(); i++) {
w = person[p][i];
if (!visit[work[w]] && (!work[w] || dfs(work[w]))) {
work[w] = p;
return 1;
}
}
return 0;
}
int bmatching()
{
int p, ans = 0;
int flag = 1;
for (p = 1; p <= n; p++) {
memset(visit, false, sizeof(visit));
ans += dfs(p);
}
while (k > 0 && flag) {
flag = 0;
for (p = 1; p <= n && k > 0; p++) {
memset(visit, false, sizeof(visit));
if (dfs(p)) {
flag = 1;
ans++;
k--;
}
}
}
return ans;
}
int main()
{
input();
printf("%d\n", bmatching());
return 0;
}