#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline T1 max(T1 a, T2 b) {
  return a < b ? b : a;
}
template <typename T1, typename T2>
inline T1 min(T1 a, T2 b) {
  return a < b ? a : b;
}
template <typename T1, typename T2>
inline T1 gmax(T1 &a, T2 b) {
  return a = a < b ? b : a;
}
template <typename T1, typename T2>
inline T1 gmin(T1 &a, T2 b) {
  return a = a < b ? a : b;
}
const char lf = '\n';
namespace ae86 {
const int bufl = 1 << 15;
char buf[bufl], *s = buf, *t = buf;
inline int fetch() {
  if (s == t) {
    t = (s = buf) + fread(buf, 1, bufl, stdin);
    if (s == t) return EOF;
  }
  return *s++;
}
inline int ty() {
  int a = 0;
  int b = 1, c = fetch();
  while (!isdigit(c)) b ^= c == '-', c = fetch();
  while (isdigit(c)) a = a * 10 + c - 48, c = fetch();
  return b ? a : -a;
}
}  // namespace ae86
using ae86::ty;
const int _ = 53, __ = 1007, inf = 0x3f3f3f3f;
int n, lim, per, va[__] = {0}, vb[__] = {0};
int f[2][__][_][_] = {0};
int main() {
  ios::sync_with_stdio(0), cout.tie(nullptr);
  n = ty(), lim = ty(), per = ty();
  int alls = 0;
  for (int i = 1, ii = ty(); i <= ii; i++) va[ty()] = 1, alls++;
  for (int i = 1, ii = ty(); i <= ii; i++) vb[ty()] = 1, alls++;
  int las = 0, cur = 1;
  memset(f, -64, sizeof(f)), f[cur][0][0][0] = 0;
  lim = min(lim, (n + n + per - 1 + per - 1) / per);
  lim = min(lim, alls);
  for (int i = 1; i <= n; i++) {
    swap(las, cur);
    for (int j = 0; j <= lim; j++)
      for (int a = 0; a <= per; a++)
        for (int b = 0; b <= per; b++) f[cur][j][a][b] = -inf;
    for (int j = 0; j <= lim; j++)
      for (int a = 0; a <= per; a++)
        for (int b = 0; b <= per; b++) {
          if (f[las][j][a][b] < 0) continue;
          gmax(f[cur][j][max(a - 1, 0)][max(b - 1, 0)],
               f[las][j][a][b] + ((va[i] && a) || (vb[i] && b)));
          gmax(f[cur][j + 1][per - 1][max(b - 1, 0)],
               f[las][j][a][b] + (va[i] || (vb[i] && b)));
          gmax(f[cur][j + 1][max(a - 1, 0)][per - 1],
               f[las][j][a][b] + ((va[i] && a) || vb[i]));
          gmax(f[cur][j + 2][per - 1][per - 1],
               f[las][j][a][b] + (va[i] || vb[i]));
        }
  }
  int ans = 0;
  for (int i = 0; i <= lim; i++)
    for (int a = 0; a <= per; a++)
      for (int b = 0; b <= per; b++) gmax(ans, f[cur][i][a][b]);
  cout << ans << lf;
  return 0;
}
