#include <bits/stdc++.h>
int dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
int dr1[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dc1[] = {1, -1, 1, 0, -1, 0, 1, -1};
int dr2[] = {0, 0, 1, -1};
int dc2[] = {1, -1, 0, 0};
using namespace std;
int a[2][1005], b[1005];
vector<vector<vector<vector<int> > > > dp;
int k;
int cal(long long x, long long p, long long k1, long long f) {
  if (x <= 0) return 0;
  int &r = dp[x][p][k1][f];
  if (r != -1) return r;
  r = 0;
  if (k1 == 0) {
    int r1 = cal(x - 1, p, k1, f);
    r = max(r, r1);
  }
  if (k1) {
    int r1 = cal(x - 1, p, k1 - 1, f) + a[f][x];
    r = max(r, r1);
  }
  if (k1 == 0 && p > 0) {
    int r1 = cal(x - 1, p - 1, k - 1, 0) + a[0][x];
    int r2 = cal(x - 1, p - 1, k - 1, 1) + a[1][x];
    r = max(r, r2);
    r = max(r, r1);
  }
  if (k1 > 0 && p > 0) {
    int y = max(0LL, x - k1);
    int val = b[x] - b[y];
    int r1 = cal(x - k1, p - 1, k - k1, f ^ 1) + val;
    r = max(r, r1);
  }
  return r;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, p, i, j, m, x, j1, j2;
  while (cin >> n >> p >> k) {
    cin >> m;
    for (i = 1; i <= m; i++) {
      cin >> x;
      a[0][x] = 1;
    }
    cin >> m;
    for (i = 1; i <= m; i++) {
      cin >> x;
      a[1][x] = 1;
    }
    for (i = 1; i <= n; i++) {
      b[i] = a[0][i] | a[1][i];
      b[i] += b[i - 1];
    }
    long long x = (n / k) + 1;
    x *= 2;
    if (x <= p) {
      cout << b[n] << endl;
      continue;
    }
    dp.resize(n + 1);
    long long cn = 0;
    for (i = 1; i <= n; i++) {
      dp[i].resize(p + 2);
      for (j = 0; j <= p; j++) {
        dp[i][j].resize(k + 2);
        for (j1 = 0; j1 <= k; j1++) {
          dp[i][j][j1].resize(2, -1);
        }
      }
    }
    long long ans = cal(n, p, 0, 0);
    cout << ans << endl;
  }
  return 0;
}
