#include <bits/stdc++.h>
using namespace std;
template <class Types>
inline Types Max(Types a, Types b) {
  return (a > b) ? a : b;
}
template <class Types>
inline Types Min(Types a, Types b) {
  return (a < b) ? a : b;
}
int n, p, k, m;
int ans;
int a[1005], b[1005];
int dp[2][1005][55][55];
inline int read() {
  char ch = getchar();
  int x = 0, f = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (; isdigit(ch); ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
  return x * f;
}
int main() {
  n = read(), p = read(), k = read();
  m = read();
  for (int i = (1); i <= (m); ++i) {
    int x = read();
    a[x] = 1;
  }
  m = read();
  for (int i = (1); i <= (m); ++i) {
    int x = read();
    b[x] = 1;
  }
  if (n <= k * (p / 2)) {
    for (int i = (1); i <= (n); ++i) {
      if (a[i] || b[i]) ++ans;
    }
    printf("%d\n", ans);
    return 0;
  }
  for (int i = (0); i <= (p); ++i)
    for (int x = (0); x <= (k); ++x)
      for (int y = (0); y <= (k); ++y) dp[0][i][x][y] = dp[1][i][x][y] = -n - 1;
  dp[0][0][0][0] = 0;
  for (int i = (1); i <= (n); ++i) {
    int t = i & 1;
    for (int j = (0); j <= (p); ++j) {
      dp[t][j][0][k - 1] = dp[t][j][k - 1][0] = -n - 1;
      for (int x = (0); x <= (k - 1); ++x) {
        for (int y = (0); y <= (k - 1); ++y) {
          dp[t][j][x][y] = dp[t ^ 1][j][x + 1][y + 1] + (a[i] | b[i]);
          if (x == 0)
            dp[t][j][x][y] = Max(dp[t][j][x][y], dp[t ^ 1][j][x][y + 1] + b[i]);
          if (y == 0)
            dp[t][j][x][y] = Max(dp[t][j][x][y], dp[t ^ 1][j][x + 1][y] + a[i]);
        }
      }
      dp[t][j][0][0] = Max(dp[t][j][0][0], dp[t ^ 1][j][0][0]);
      dp[t][j][k][k] = -n - 1;
      if (j) {
        for (int y = (0); y <= (k - 1); ++y) {
          dp[t][j][0][k - 1] =
              Max(dp[t][j][0][k - 1], dp[t ^ 1][j - 1][1][y] + (a[i] | b[i]));
          dp[t][j][0][k - 1] =
              Max(dp[t][j][0][k - 1], dp[t ^ 1][j - 1][0][y] + b[i]);
          dp[t][j][k - 1][0] =
              Max(dp[t][j][k - 1][0], dp[t ^ 1][j - 1][y][1] + (a[i] | b[i]));
          dp[t][j][k - 1][0] =
              Max(dp[t][j][k - 1][0], dp[t ^ 1][j - 1][y][0] + a[i]);
        }
        for (int x = (1); x <= (k - 1); ++x) {
          dp[t][j][x][k - 1] = -n - 1;
          dp[t][j][k - 1][x] = -n - 1;
          for (int y = (0); y <= (k - 1); ++y) {
            dp[t][j][x][k - 1] = Max(
                dp[t][j][x][k - 1], dp[t ^ 1][j - 1][x + 1][y] + (a[i] | b[i]));
            dp[t][j][k - 1][x] = Max(
                dp[t][j][k - 1][x], dp[t ^ 1][j - 1][y][x + 1] + (a[i] | b[i]));
          }
        }
      } else {
        for (int x = (0); x <= (k); ++x)
          dp[t][j][k][x] = dp[t][j][x][k] = -n - 1;
      }
    }
  }
  for (int i = (0); i <= (p); ++i)
    for (int x = (0); x <= (k); ++x)
      for (int y = (0); y <= (k); ++y) ans = Max(ans, dp[n & 1][i][x][y]);
  printf("%d\n", ans);
  return 0;
}
