#include <bits/stdc++.h>
namespace speed {
template <typename T>
inline T read() {
  register int f = 1;
  register T sum = 0;
  register char ch = getchar();
  while (!isdigit(ch)) {
    if (!(ch ^ '-')) f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    sum = (sum << 1) + (sum << 3) + (ch ^ 48);
    ch = getchar();
  }
  return f * sum;
}
template <typename T>
inline void write(register T x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x > 9) write(x / 10);
  putchar(x % 10 + 48);
}
}  // namespace speed
using namespace std;
using namespace speed;
const int N = 1e3 + 5, P = 1e3 + 5, M = 55;
int n, m, k, l, r, ans;
int f[2][N][M][M], a[N], b[N];
signed main() {
  n = read<int>(), m = read<int>(), k = read<int>();
  l = read<int>();
  for (register int i = 1; i <= l; i = -~i) a[read<int>()] = 1;
  r = read<int>();
  for (register int i = 1; i <= r; i = -~i) b[read<int>()] = 1;
  if (m * k >= n * 2) {
    for (register int i = 1; i <= n; i = -~i) ans += a[i] | b[i];
    write(ans);
    return 0;
  }
  memset(f, -0x3f3f3f, sizeof f);
  f[0][0][0][0] = 0;
  for (register int i = 1; i <= n; i = -~i) {
    register int q = i % 2, last = (i + 1) % 2;
    memset(f[q], -0x3f3f3f, sizeof f[q]);
    for (register int j = 0; j <= m; j = -~j)
      for (register int x = 0; x <= k; x = -~x)
        for (register int y = 0; y <= k; y = -~y) {
          register int res = f[last][j][x][y];
          f[q][j][max(x - 1, 0)][max(y - 1, 0)] =
              max(f[q][j][max(x - 1, 0)][max(y - 1, 0)], res);
          if (x)
            f[q][j][x - 1][max(y - 1, 0)] =
                max(f[q][j][x - 1][max(y - 1, 0)], res + a[i]);
          if (x)
            f[q][j + 1][x - 1][k - 1] =
                max(f[q][j + 1][x - 1][k - 1], res + (a[i] | b[i]));
          if (y)
            f[q][j][max(x - 1, 0)][y - 1] =
                max(f[q][j][max(x - 1, 0)][y - 1], res + b[i]);
          if (y)
            f[q][j + 1][k - 1][y - 1] =
                max(f[q][j + 1][k - 1][y - 1], res + (a[i] | b[i]));
          if (x && y)
            f[q][j][x - 1][y - 1] =
                max(f[q][j][x - 1][y - 1], res + (a[i] | b[i]));
          f[q][j + 1][k - 1][max(y - 1, 0)] =
              max(f[q][j + 1][k - 1][max(y - 1, 0)], res + a[i]);
          f[q][j + 1][max(x - 1, 0)][k - 1] =
              max(f[q][j + 1][max(x - 1, 0)][k - 1], res + b[i]);
          f[q][j + 2][k - 1][k - 1] =
              max(f[q][j + 2][k - 1][k - 1], res + (a[i] | b[i]));
        }
  }
  for (register int j = 0; j <= m; j = -~j)
    for (register int x = 0; x <= k; x = -~x)
      for (register int y = 0; y <= k; y = -~y)
        ans = max(ans, f[n % 2][j][x][y]);
  write(ans);
  return 0;
}
