#include <bits/stdc++.h>
using namespace std;
int acc1[1001], acc2[1001];
int n, k, p;
int dp2[2][50][50][1001];
unordered_map<
    int, unordered_map<int, unordered_map<int, unordered_map<int, int> > > >
    dp;
int solve(int idx, int LeftOne, int Lefttwo, int leftp) {
  if (idx == n) {
    return 0;
  }
  if (dp[idx][LeftOne][Lefttwo].count(leftp))
    return dp[idx][LeftOne][Lefttwo][leftp];
  int &ret = dp[idx][LeftOne][Lefttwo][leftp];
  ret = 0;
  ret =
      max(ret, solve(idx + 1, max(LeftOne - 1, 0), max(Lefttwo - 1, 0), leftp));
  if (LeftOne)
    ret = max(ret, solve(idx + 1, LeftOne - 1, max(Lefttwo - 1, 0), leftp) +
                       acc1[idx + 1]);
  if (Lefttwo)
    ret = max(ret, solve(idx + 1, max(LeftOne - 1, 0), Lefttwo - 1, leftp) +
                       acc2[idx + 1]);
  if (Lefttwo == 0 && leftp && acc2[idx + 1])
    ret = max(ret, solve(idx + 1, max(LeftOne - 1, 0), k - 1, leftp - 1) +
                       acc2[idx + 1]);
  if (LeftOne == 0 && leftp && acc1[idx + 1])
    ret = max(ret, solve(idx + 1, k - 1, max(Lefttwo - 1, 0), leftp - 1) +
                       acc1[idx + 1]);
  return ret;
}
int main() {
  scanf("%d%d%d", &n, &p, &k);
  int ss;
  scanf("%d", &ss);
  for (int i = 0; i < ss; i++) {
    int a;
    scanf("%d", &a);
    acc1[a] = 1;
  }
  scanf("%d", &ss);
  for (int i = 0; i < ss; i++) {
    int a;
    scanf("%d", &a);
    acc2[a] = 1;
  }
  int bound = min(p, 2 * ((1000 + k - 1) / k));
  for (int i = n - 1; i >= 0; i--)
    for (int k1 = 0; k1 < k; k1++)
      for (int k2 = 0; k2 < k; k2++)
        for (int leftp = 0; leftp <= bound; leftp++) {
          int &ret = dp2[i % 2][k1][k2][leftp];
          ret = 0;
          ret =
              max(ret, dp2[(i + 1) % 2][max(k1 - 1, 0)][max(k2 - 1, 0)][leftp]);
          if (k1)
            ret = max(ret, dp2[(i + 1) % 2][(k1 - 1)][max(k2 - 1, 0)][leftp] +
                               acc1[i + 1]);
          if (k2)
            ret = max(ret, dp2[(i + 1) % 2][max(k1 - 1, 0)][k2 - 1][leftp] +
                               acc2[i + 1]);
          if (k2 == 0 && leftp && acc2[i + 1])
            ret = max(ret, dp2[(i + 1) % 2][max(k1 - 1, 0)][k - 1][leftp - 1] +
                               acc2[i + 1]);
          if (k1 == 0 && leftp && acc1[i + 1])
            ret = max(ret, dp2[(i + 1) % 2][k - 1][max(k2 - 1, 0)][leftp - 1] +
                               acc1[i + 1]);
        }
  printf("%d\n", dp2[0][0][0][bound]);
  return 0;
}
