#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <math.h>
#include <string>
#define lli long long int
using namespace std;
typedef vector<long long int> vi;
const int N = 301;
const int E = 1e9;
lli n, K, ans, count1;
vector< vi > graph;
vector< vi > adjlist;
lli b[N];
bool visited[N];
bool pos[N][N];
lli dfs(lli node){
ans++;
visited[node] = true;
for(auto v:adjlist[node]){
if(!visited[v]){
dfs(v);
}
}
return ans;
}
int main(){
lli x;
memset(pos, true, sizeof pos);
memset(b, 0, sizeof b);
memset(visited, false, sizeof visited);
ans = 0;
visited[0] = true;
cin >> n >> K;
graph.resize(n+1);
adjlist.resize(n+1);
for(lli i = 0; i < n; i++){
cin >> x;
b[i] = x;
for(lli j = 0; j < x; j++){
lli y;
cin >> y;
graph[i].push_back(y);
}
}
for(auto v: graph){
sort(v.begin(), v.end());
}
for(lli parent = 0; parent < n; parent++){
for(lli child = 0; child < n; child++){
if(child == parent) continue;
count1 = 0;
for(int k = 0; k < b[child]; k++){
if(binary_search(graph[parent].begin(), graph[parent].end(), graph[child][k]))
{
count1++;
}
if(count1 >= K){
adjlist[parent].push_back(child);
adjlist[child].push_back(parent);
}
}
}
}
cout << dfs(0);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8bWF0aC5oPiAKI2luY2x1ZGUgPHN0cmluZz4KI2RlZmluZSBsbGkgbG9uZyBsb25nIGludAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHZlY3Rvcjxsb25nIGxvbmcgaW50PiB2aTsKIApjb25zdCBpbnQgTiA9IDMwMTsKY29uc3QgaW50IEUgPSAxZTk7CgpsbGkgbiwgSywgYW5zLCBjb3VudDE7CnZlY3RvcjwgdmkgPiBncmFwaDsKdmVjdG9yPCB2aSA+IGFkamxpc3Q7CmxsaSBiW05dOwpib29sIHZpc2l0ZWRbTl07CmJvb2wgcG9zW05dW05dOwoKCiAKbGxpIGRmcyhsbGkgbm9kZSl7CglhbnMrKzsKIAoJdmlzaXRlZFtub2RlXSA9IHRydWU7Cglmb3IoYXV0byB2OmFkamxpc3Rbbm9kZV0pewoJCWlmKCF2aXNpdGVkW3ZdKXsKCQkJZGZzKHYpOwoJCX0KCX0KCXJldHVybiBhbnM7Cn0KIAppbnQgbWFpbigpewoJbGxpIHg7CgltZW1zZXQocG9zLCB0cnVlLCBzaXplb2YgcG9zKTsKCW1lbXNldChiLCAwLCBzaXplb2YgYik7CgltZW1zZXQodmlzaXRlZCwgZmFsc2UsIHNpemVvZiB2aXNpdGVkKTsKIAoJYW5zID0gMDsKCXZpc2l0ZWRbMF0gPSB0cnVlOwoJY2luID4+IG4gPj4gSzsKCWdyYXBoLnJlc2l6ZShuKzEpOwoJYWRqbGlzdC5yZXNpemUobisxKTsKCWZvcihsbGkgaSA9IDA7IGkgPCBuOyBpKyspewoJCWNpbiA+PiB4OwoJCWJbaV0gPSB4OwogCgkJZm9yKGxsaSBqID0gMDsgaiA8IHg7IGorKyl7CgkJCWxsaSB5OwoJCQljaW4gPj4geTsKCQkJZ3JhcGhbaV0ucHVzaF9iYWNrKHkpOwoJCX0KCX0KIAoJZm9yKGF1dG8gdjogZ3JhcGgpewoJCXNvcnQodi5iZWdpbigpLCB2LmVuZCgpKTsKCX0KCgkKCWZvcihsbGkgcGFyZW50ID0gMDsgcGFyZW50IDwgbjsgcGFyZW50KyspewoJCWZvcihsbGkgY2hpbGQgPSAwOyBjaGlsZCA8IG47IGNoaWxkKyspewoJCQoJCQlpZihjaGlsZCA9PSBwYXJlbnQpIGNvbnRpbnVlOwoJCQljb3VudDEgPSAwOwoJCQlmb3IoaW50IGsgPSAwOyBrIDwgYltjaGlsZF07IGsrKyl7CgkJCQlpZihiaW5hcnlfc2VhcmNoKGdyYXBoW3BhcmVudF0uYmVnaW4oKSwgZ3JhcGhbcGFyZW50XS5lbmQoKSwgZ3JhcGhbY2hpbGRdW2tdKSkKCQkJCXsKCQkJCQljb3VudDErKzsKCQkJCX0KCQkJCWlmKGNvdW50MSA+PSBLKXsKCQkJCQlhZGpsaXN0W3BhcmVudF0ucHVzaF9iYWNrKGNoaWxkKTsKCQkJCQlhZGpsaXN0W2NoaWxkXS5wdXNoX2JhY2socGFyZW50KTsKCQkJCX0KCQkJfSAgCgkJfQoJfQoJY291dCA8PCBkZnMoMCk7CiAKfQo=