#include <bits/stdc++.h>
using namespace std;
inline int Read() {
  char c = getchar();
  int num = 0;
  while ('0' > c || c > '9') c = getchar();
  while ('0' <= c && c <= '9') num = num * 10 + c - '0', c = getchar();
  return (num);
}
inline void Add(int &a, int b) { a = max(a, b); }
int ans, n, m, f[2010][55][55], ln, s, p, a[2010], b[2010], ff[2010][55][55],
    sf[2010];
int main() {
  n = Read(), m = Read(), ln = Read();
  s = Read();
  for (int i = 1; i <= s; i++) a[Read()] = 1;
  p = Read();
  for (int i = 1; i <= p; i++) b[Read()] = 1;
  for (int j = 0; j <= m; j++)
    for (int k = 0; k <= ln; k++)
      for (int l = 0; l <= ln; l++) f[j][k][l] = -1e9;
  f[0][0][0] = 0;
  for (int i = n; i; i--) sf[i] = sf[i + 1] + (a[i] || b[i]);
  for (int lst = 0, i = 0; i < n; i++) {
    int al = (n - i + ln) / ln;
    al *= 2;
    int low = max(0, m - al + 1);
    for (int j = lst; j < low; j++)
      for (int k = 0; k <= ln; k++)
        for (int l = 0; l <= ln; l++) ans = max(ans, f[j][k][l] + sf[i + 1]);
    for (int j = low; j <= m; j++)
      for (int k = 0; k <= ln; k++)
        for (int l = 0; l <= ln; l++) {
          ff[j][k][l] = f[j][k][l], f[j][k][l] = -1e9;
        }
    for (int j = low; j <= m; j++) {
      for (int k = 0; k < ln; k++)
        for (int l = 0; l < ln; l++) {
          int k_ = k, l_ = l;
          if (k_) k_--;
          if (l_) l_--;
          if (!k && a[i + 1] && j < m)
            Add(f[j + 1][ln - 1][l_], ff[j][k][l] + 1);
          if (!l && b[i + 1] && j < m)
            Add(f[j + 1][k_][ln - 1], ff[j][k][l] + 1);
          Add(f[j][k_][l_], ff[j][k][l] + ((k && a[i + 1]) || (l && b[i + 1])));
        }
    }
    lst = low;
  }
  for (int t = 0; t <= m; t++)
    for (int i = 0; i <= ln; i++)
      for (int j = 0; j <= ln; j++) ans = max(ans, f[t][i][j]);
  printf("%d\n", ans);
}
