#include <bits/stdc++.h>
using namespace std;
const int MX = 1005;
long long acum[MX][4];
long long n, k;
long long getAcum(long long l, long long r, long long type) {
  r = min(r, n - 1);
  return acum[r + 1][type] - acum[l][type];
}
vector<vector<bool>> used[2][MX];
vector<vector<long long>> dp[2][MX];
long long maxQuestions(long long type, long long pos, long long tries,
                       long long other) {
  if (pos >= n) return 0;
  if (tries <= 0) return 0;
  long long &ans = dp[type][pos][tries][other];
  if (used[type][pos][tries][other]) {
    return ans;
  }
  used[type][pos][tries][other] = true;
  ans = maxQuestions(type, pos + 1, tries, min(other + 1, k));
  if (other < k) {
    long long inter = getAcum(pos, pos - other + k - 1, 2);
    ans = max(
        ans, getAcum(pos, pos + k - 1, type) - inter +
                 maxQuestions(type ^ 1, pos - other + k, tries - 1, k - other));
  } else {
    assert(other == k);
    if (tries >= 2) {
      ans = max(ans, getAcum(pos, pos + k - 1, 3) +
                         maxQuestions(0, pos + k, tries - 2, k));
    }
    ans = max(ans, getAcum(pos, pos + k - 1, 0) +
                       maxQuestions(1, pos + 1, tries - 1, 1));
    ans = max(ans, getAcum(pos, pos + k - 1, 1) +
                       maxQuestions(0, pos + 1, tries - 1, 1));
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long p;
  cin >> n >> p >> k;
  vector<vector<bool>> correct(n, vector<bool>(4, false));
  long long r;
  cin >> r;
  for (long long i = 0; i < (long long)r; i++) {
    long long x;
    cin >> x;
    x--;
    correct[x][0] = true;
  }
  cin >> r;
  for (long long i = 0; i < (long long)r; i++) {
    long long x;
    cin >> x;
    x--;
    correct[x][1] = true;
  }
  for (long long i = 0; i < (long long)n; i++) {
    correct[i][2] = (correct[i][0] & correct[i][1]);
  }
  for (long long i = 0; i < (long long)n; i++) {
    correct[i][3] = (correct[i][0] | correct[i][1]);
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 4; j++) {
      acum[i + 1][j] = acum[i][j] + (int)correct[i][j];
    }
  }
  p = min(p, (2 * n) / k + 1);
  for (long long i = 0; i < (long long)2; i++) {
    for (long long j = 0; j < (long long)n; j++) {
      used[i][j] = vector<vector<bool>>(p + 1, vector<bool>(k + 1, false));
      dp[i][j] = vector<vector<long long>>(p + 1, vector<long long>(k + 1, 0));
    }
  }
  cout << maxQuestions(0, 0, p, k) << "\n";
  return 0;
}
