#include <bits/stdc++.h>
int N, P, K;
short O, f[1001][1001][50], g[1001][1001][50], s0[1001], s1[1001], s2[1001];
inline void push(short &x, short y) {
  if (y > x) x = y;
}
int main() {
  scanf("%d%d%d", &N, &P, &K);
  {
    int ___, ____;
    scanf("%d", &___);
    for (int i = 1; i <= ___; i++) {
      scanf("%d", &____);
      s0[____] = 1;
      s2[____] = 1;
    }
  }
  {
    int ___, ____;
    scanf("%d", &___);
    for (int i = 1; i <= ___; i++) {
      scanf("%d", &____);
      s1[____] = 1;
      s2[____] = 1;
    }
  }
  for (int i = 1; i <= N; i++) {
    s0[i] += s0[i - 1];
    s1[i] += s1[i - 1];
    s2[i] += s2[i - 1];
  }
  for (int i = 0; i <= N; i++)
    for (int j = 0; j <= P; j++)
      for (int k = 0; k < K; k++) f[i][j][k] = g[i][j][k] = -15000;
  f[0][0][0] = g[0][0][0] = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j <= P - 2; j++) {
      short *F00 = f[i][j], *F01 = f[i][j + 1], *F10 = f[i + 1][j],
            *F11 = f[i + 1][j + 1];
      short *G00 = g[i][j], *G01 = g[i][j + 1], *G10 = g[i + 1][j],
            *G11 = g[i + 1][j + 1];
      push(F00[0], G00[0]);
      push(G00[0], F00[0]);
      push(F10[0], F00[0]);
      push(F11[K - 1], F00[0] + s0[i + 1] - s0[i]);
      push(G11[K - 1], F00[0] + s1[i + 1] - s1[i]);
      if (i + K <= N)
        push(f[i + K][j + 2][0], F00[0] + s2[i + K] - s2[i]);
      else
        push(O, F00[0] + s2[N] - s2[i]);
      auto FF = f[i], GG = g[i];
      for (int k = 1; k < K; k++) {
        push(F10[k - 1], F00[k] + s0[i + 1] - s0[i]);
        push(G10[k - 1], G00[k] + s1[i + 1] - s1[i]);
        if (i + k <= N) {
          push(f[i + k][j + 1][K - k], G00[k] + s2[i + k] - s2[i]);
          push(g[i + k][j + 1][K - k], F00[k] + s2[i + k] - s2[i]);
        } else {
          push(O, F00[k] + s2[N] - s2[i]);
          push(O, G00[k] + s2[N] - s2[i]);
        }
      }
    }
    {
      int j = P - 1;
      push(f[i][j][0], g[i][j][0]);
      push(g[i][j][0], f[i][j][0]);
      push(f[i + 1][j][0], f[i][j][0]);
      push(f[i + 1][j + 1][K - 1], f[i][j][0] + s0[i + 1] - s0[i]);
      push(g[i + 1][j + 1][K - 1], f[i][j][0] + s1[i + 1] - s1[i]);
      for (int k = 1; k < K; k++) {
        push(f[i + 1][j][k - 1], f[i][j][k] + s0[i + 1] - s0[i]);
        push(g[i + 1][j][k - 1], g[i][j][k] + s1[i + 1] - s1[i]);
        if (i + k <= N) {
          push(f[i + k][j + 1][K - k], g[i][j][k] + s2[i + k] - s2[i]);
          push(g[i + k][j + 1][K - k], f[i][j][k] + s2[i + k] - s2[i]);
        } else {
          push(O, f[i][j][k] + s2[N] - s2[i]);
          push(O, g[i][j][k] + s2[N] - s2[i]);
        }
      }
    }
    {
      int j = P;
      push(f[i][j][0], g[i][j][0]);
      push(g[i][j][0], f[i][j][0]);
      push(f[i + 1][j][0], f[i][j][0]);
      for (int k = 1; k < K; k++) {
        push(f[i + 1][j][k - 1], f[i][j][k] + s0[i + 1] - s0[i]);
        push(g[i + 1][j][k - 1], g[i][j][k] + s1[i + 1] - s1[i]);
      }
    }
  }
  for (int j = 0; j <= P; j++)
    for (int k = 0; k < K; k++) {
      push(O, f[N][j][k]);
      push(O, g[N][j][k]);
    }
  printf("%d\n", O);
  return 0;
}
