#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <unordered_map>
#include <numeric>
#include <iomanip>
using namespace std;
#define pii pair<int , int>
#define ll long long
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
const long long dx[4] = {1, 0, -1, 0}, dy[4] = {0, -1, 0, 1};
const long long dl[2] = {1, -1};
const long long MOD = 1000000007;
const long long MAXN = 1005;
int n, m, k, ans = 0;
vector<int> v[MAXN];
vector<bool> visited;
vector<int> work;
bool dfs(int cur){
if(visited[cur]){
return false;
}
visited[cur] = true;
for(auto nxt : v[cur]){
if(work[nxt] == -1 || dfs(work[nxt])){
work[nxt] = cur;
return true;
}
}
return false;
}
int main() {
FAST;
cin >> n >> m >> k;
for(int x, i = 0; i < n; i++){
cin >> x;
for(int y, j = 0; j < x; j++){
cin >> y;
y--;
v[i].push_back(y);
}
}
work.assign(m, -1);
for(int i = 0; i < n; i++){
visited.assign(n, false);
if(dfs(i)){
ans++;
}
}
for(int i = 0; i < n && k > 0; i++){
visited.assign(n, false);
if(dfs(i)){
ans++;
k--;
}
}
cout << ans << "\n";
}