#include <bits/stdc++.h>
using namespace std;
char ch;
int fl;
inline void read(int &a) {
  for (fl = 1, ch = getchar(); ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') fl = -fl;
  for (a = 0; ch >= '0' && ch <= '9'; ch = getchar()) (a *= 10) += (ch - '0');
  a *= fl;
}
const int Maxn = 1e4 + 10;
const int K = 50;
const int inf = 0x7fffffff;
inline void Max(int &a, int b) {
  if (b > a) a = b;
}
int f[Maxn][K][K], last[Maxn][K][K];
int n, p, k, i, j, x, y, T, Ans, s, d;
bool a1[Maxn], a2[Maxn];
int main() {
  read(n);
  read(p);
  read(k);
  p = min(p, 2 * (n / k + 1));
  k--;
  for (read(s), i = 1; i <= s; i++) read(d), a1[d] = 1;
  for (read(s), i = 1; i <= s; i++) read(d), a2[d] = 1;
  for (j = 0; j <= p; j++)
    for (x = 0; x <= k; x++)
      for (y = 0; y <= k; y++) last[j][x][y] = -inf;
  last[0][k][k] = 0;
  for (i = 1; i <= n; i++) {
    for (j = 0; j <= p; j++)
      for (x = 0; x <= k; x++)
        for (y = 0; y <= k; y++) f[j][x][y] = -inf;
    Max(f[0][k][k], last[0][k][k]);
    for (j = 1; j <= p; j++) {
      Max(f[j][k][k], last[j][k][k]);
      for (x = 0; x <= k; x++) {
        if (x) Max(f[j][x][k], last[j][x - 1][k] + a1[i]);
        Max(f[j][0][k], last[j - 1][x][k] + a1[i]);
      }
      for (y = 0; y <= k; y++) {
        if (y) Max(f[j][k][y], last[j][k][y - 1] + a2[i]);
        Max(f[j][k][0], last[j - 1][k][y] + a2[i]);
      }
      for (x = 0; x <= k; x++)
        for (y = 0; y <= k; y++) {
          T = (a1[i] || a2[i]);
          if (x && y) Max(f[j][x][y], last[j][x - 1][y - 1] + T);
          if (x) Max(f[j][x][0], last[j - 1][x - 1][y] + T);
          if (y) Max(f[j][0][y], last[j - 1][x][y - 1] + T);
          if (j >= 2) Max(f[j][0][0], last[j - 2][x][y] + T);
        }
    }
    for (j = 0; j <= p; j++)
      for (x = 0; x <= k; x++)
        for (y = 0; y <= k; y++)
          Max(Ans, f[j][x][y]), last[j][x][y] = f[j][x][y];
  }
  printf("%d", Ans);
  return 0;
}
