#include <bits/stdc++.h>
int w[101000];
int sum[30];
int qs[1050000], nq;
int ya[1050000];
int main(void) {
  int n, m, d, i, j, ii;
  int k;
  int aa;
  int g, g2;
  int ans;
  while (scanf("%d %d %d", &n, &m, &d) != EOF) {
    for (i = (1 << m) - 1; i >= 0; i--) {
      ya[i] = 0;
    }
    for (i = 1; i <= m; i++) {
      scanf("%d", &k);
      for (j = 1; j <= k; j++) {
        scanf("%d", &aa);
        w[aa] = i;
      }
    }
    for (i = 1; i <= m; i++) {
      sum[i] = 0;
    }
    for (i = 1; i < d; i++) {
      sum[w[i]]++;
    }
    nq = 0;
    for (i = d; i <= n; i++) {
      sum[w[i]]++;
      g = 0;
      for (j = 1; j <= m; j++) {
        g <<= 1;
        if (sum[j]) {
          g++;
        }
      }
      if (!ya[g]) {
        ya[g] = 1;
        qs[++nq] = g;
      }
      sum[w[i - d + 1]]--;
    }
    for (i = 1; i <= nq; i++) {
      g = qs[i];
      ii = 1;
      for (j = 1; j <= m; j++) {
        if (!(g & ii)) {
          g2 = g | ii;
          if (!ya[g2]) {
            ya[g2] = 1;
            qs[++nq] = g2;
          }
        }
        ii <<= 1;
      }
    }
    ans = 2000;
    for (i = (1 << m) - 1; i >= 0; i--) {
      if (!ya[i]) {
        ii = i;
        g = m;
        while (ii) {
          g -= (ii & 1);
          ii >>= 1;
        }
        if (g < ans) {
          ans = g;
        }
      }
    }
    printf("%d\n", ans);
  }
  return 0;
}
