#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
int q1[MAXN], q2[MAXN], q3[MAXN];
int dp[2][MAXN][52][52];
int need, n;
int getans(int pos, int rem, int a, int b) {
  if (rem >= need) return q3[n - 1] - (pos ? q3[pos - 1] : 0);
  return dp[pos & 1][rem][a][b];
}
int main() {
  int p, k;
  cin >> n >> p >> k;
  int qtd;
  cin >> qtd;
  while (qtd--) {
    int x;
    cin >> x;
    --x;
    q1[x] = 1;
  }
  cin >> qtd;
  while (qtd--) {
    int x;
    cin >> x;
    --x;
    q2[x] = 1;
  }
  for (int i = 0; i < (n); ++i) {
    if (q1[i] || q2[i]) q3[i] = 1;
    if (i) q3[i] += q3[i - 1];
  }
  need = (n / k + (n % k ? 1 : 0)) * 2;
  for (int pos = n - 1; pos >= 0; --pos)
    for (int rem = 0; rem < (p + 1); ++rem) {
      if (rem >= need) continue;
      for (int a = 0; a < (k); ++a)
        for (int b = 0; b < (k); ++b) {
          int cur = pos & 1, prev = 1 - cur;
          int& ans = dp[cur][rem][a][b] = 0;
          if ((a > 0 && q1[pos]) || (b > 0 && q2[pos]))
            ans = 1 + getans(pos + 1, rem, max(a - 1, 0), max(b - 1, 0));
          else {
            ans = dp[prev][rem][max(a - 1, 0)][max(b - 1, 0)];
            ans = getans(pos + 1, rem, max(a - 1, 0), max(b - 1, 0));
            if (rem > 0 && q1[pos])
              ans =
                  max(ans, 1 + getans(pos + 1, rem - 1, k - 1, max(b - 1, 0)));
            if (rem > 0 && q2[pos])
              ans =
                  max(ans, 1 + getans(pos + 1, rem - 1, max(a - 1, 0), k - 1));
          }
        }
    }
  cout << getans(0, p, 0, 0) << endl;
  return 0;
}
