#include <bits/stdc++.h>
using namespace std;
const int T = 1e5 + 5;
int j, x, n, m, d, i, l;
int col[T * 2];
int VAL[T];
int num[T], value[T], st[T], fn[T];
int dp[11 * T];
void read() {
  scanf("%d %d %d", &n, &m, &d);
  for (i = 0; i < m; i++) {
    scanf("%d", &l);
    while (l--) {
      scanf("%d", &x);
      x--;
      col[x] = i;
      if (x < d) st[i] = 1;
      if (x >= n - d) fn[i] = 1;
    }
  }
}
void precalc() {
  for (i = n; i < 2 * n; i++) col[i] = 100;
  for (i = 0; i < n; i++) {
    if (i > n - d) {
      continue;
    }
    if (!i) {
      for (j = 0; j < d - 1; j++) num[col[j]]++;
    }
    num[col[i + d - 1]]++;
    if (i > 0) num[col[i - 1]]--;
    int x = (1 << m) - 1;
    for (j = 0; j < m; j++)
      if (num[j] > 0) x ^= (1 << j);
    dp[x] = 1;
  }
}
int cnt(int x) {
  int ans = 0;
  while (x) {
    ans += x & 1;
    x >>= 1;
  }
  return ans;
}
int solve() {
  int ans = m;
  for (i = (1 << m) - 1; i >= 0; i--) {
    for (j = 0; j < m; j++)
      if (!(i & (1 << j))) {
        if (dp[i ^ (1 << j)]) dp[i] = 1;
      }
  }
  for (i = (1 << m) - 1; i >= 0; i--) {
    if (!dp[i]) ans = min(ans, cnt(i));
  }
  return ans;
}
int main() {
  read();
  if (d == 1) {
    cout << m << endl;
    return 0;
  }
  precalc();
  printf("%d\n", solve());
}
