#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e2+10;
int n, m, k;
vector<int> books[N];
int vis[N], cnt;
int ans;
bool judge(vector<int> book)
{
for(auto x : book)
if(vis[x] == 0) return false;
return true;
}
int deal(){
int ps = 0;
for(int i = 0; i < n; ++ i)
if(judge(books[i])) ps ++;
return ps;
}
void dfs(int u)
{
if(u > n) return;
if(cnt == m)
{
ans = max(ans, deal());
return;
}
for(int i = u; i < k; ++ i)
{
if(vis[i]) continue;
vis[i] = 1; cnt ++;
dfs(i + 1);
vis[i] = 0; cnt --;
}
}
int main(){
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < n; ++ i)
{
int cnt; cin >> cnt;
while(cnt --)
{
int x; scanf("%d", &x);
books[i].push_back(x - 1);
}
}
dfs(0);
cout << ans;
}