#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 = 1001;
int n, K, count1, ans;
vector< vi > graph;
vector< vi > adjlist;
int b[N];
bool visited[N];
bool pos[N][N];
int 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);
count1 = 0;
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(lli parent = 0; parent < n; parent++){
for(lli child = 0; child < n; child++){
if(!pos[parent][child]) continue;
pos[parent][child] = false;
if(child == parent) continue;
count1 = 0;
for(lli k = 0; k < b[child]; k++){
for(lli l = 0; l < b[parent]; l++){
if(graph[parent][l] == graph[child][k]){
count1++;
}
if(count1 >= K){
adjlist[parent].push_back(child);
break;
}
}
}
}
}
cout << dfs(0);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8bWF0aC5oPiAKI2luY2x1ZGUgPHN0cmluZz4KI2RlZmluZSBsbGkgbG9uZyBsb25nIGludAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHZlY3Rvcjxsb25nIGxvbmcgaW50PiB2aTsKIApjb25zdCBpbnQgTiA9IDEwMDE7CmludCBuLCBLLCBjb3VudDEsIGFuczsKdmVjdG9yPCB2aSA+IGdyYXBoOwp2ZWN0b3I8IHZpID4gYWRqbGlzdDsKaW50IGJbTl07CmJvb2wgdmlzaXRlZFtOXTsKYm9vbCBwb3NbTl1bTl07CmludCBkZnMobGxpIG5vZGUpewoJYW5zKys7CiAKCXZpc2l0ZWRbbm9kZV0gPSB0cnVlOwoJZm9yKGF1dG8gdjphZGpsaXN0W25vZGVdKXsKCQlpZighdmlzaXRlZFt2XSl7CgkJCWRmcyh2KTsKCQl9Cgl9CglyZXR1cm4gYW5zOwp9CiAKaW50IG1haW4oKXsKCWxsaSB4OwoJbWVtc2V0KHBvcywgdHJ1ZSwgc2l6ZW9mIHBvcyk7CgltZW1zZXQoYiwgMCwgc2l6ZW9mIGIpOwoJbWVtc2V0KHZpc2l0ZWQsIGZhbHNlLCBzaXplb2YgdmlzaXRlZCk7CiAKCWFucyA9IDA7Cgl2aXNpdGVkWzBdID0gdHJ1ZTsKCWNpbiA+PiBuID4+IEs7CglncmFwaC5yZXNpemUobisxKTsKCWFkamxpc3QucmVzaXplKG4rMSk7Cgljb3VudDEgPSAwOwoJZm9yKGxsaSBpID0gMDsgaSA8IG47IGkrKyl7CgkJY2luID4+IHg7CgkJYltpXSA9IHg7CiAKCQlmb3IobGxpIGogPSAwOyBqIDwgeDsgaisrKXsKCQkJbGxpIHk7CgkJCWNpbiA+PiB5OwoJCQlncmFwaFtpXS5wdXNoX2JhY2soeSk7CgkJfQoJfQogCglmb3IobGxpIHBhcmVudCA9IDA7IHBhcmVudCA8IG47IHBhcmVudCsrKXsKCQlmb3IobGxpIGNoaWxkID0gMDsgY2hpbGQgPCBuOyBjaGlsZCsrKXsKCQkJaWYoIXBvc1twYXJlbnRdW2NoaWxkXSkgY29udGludWU7CgkJCXBvc1twYXJlbnRdW2NoaWxkXSA9IGZhbHNlOwoJCQlpZihjaGlsZCA9PSBwYXJlbnQpIGNvbnRpbnVlOwoJCQljb3VudDEgPSAwOwoJCQlmb3IobGxpIGsgPSAwOyBrIDwgYltjaGlsZF07IGsrKyl7CgkJCQlmb3IobGxpIGwgPSAwOyBsIDwgYltwYXJlbnRdOyBsKyspewogCgkJCQkJaWYoZ3JhcGhbcGFyZW50XVtsXSA9PSBncmFwaFtjaGlsZF1ba10pewoJCQkJCQljb3VudDErKzsJCgkJCQkJfQoJCQkJCWlmKGNvdW50MSA+PSBLKXsKCQkJCQkJYWRqbGlzdFtwYXJlbnRdLnB1c2hfYmFjayhjaGlsZCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KIAoJCQkJCiAKCQkJfQoJCX0KCX0KCWNvdXQgPDwgZGZzKDApOwogCn0=