#include <bits/stdc++.h>
using namespace std;
const int oo = 1e7;
int i, j, k, n, m, s, t, ans;
int pre, now, A, B;
int dp[2][1005][55][55];
int a[1005];
int b[1005];
int Ceil(int n, int t) {
  if (n % t == 0)
    return n / t;
  else
    return n / t + 1;
}
void update(int &x, int y) {
  x = max(x, y);
  ans = max(ans, y);
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  scanf("%d", &A);
  for (int i = 1; i <= A; i++) {
    int x;
    scanf("%d", &x);
    a[x] = 1;
  }
  scanf("%d", &B);
  for (int i = 1; i <= B; i++) {
    int x;
    scanf("%d", &x);
    b[x] = 1;
  }
  pre = 0, now = 1;
  for (int j = 0; j <= min(m, Ceil(1, k)); j++)
    for (int x = 0; x <= k; x++)
      for (int y = 0; y <= k; y++) dp[pre][j][x][y] = -oo;
  update(dp[pre][1][k][0], a[1]);
  update(dp[pre][1][0][k], b[1]);
  update(dp[pre][2][k][k], a[1] | b[1]);
  update(dp[pre][0][0][0], 0);
  for (int i = 1; i < n; i++) {
    for (int j = 0; j <= min(m, 2 * Ceil(i + 1, k)); j++)
      for (int x = 0; x <= k; x++)
        for (int y = 0; y <= k; y++) dp[now][j][x][y] = -oo;
    for (int j = 0; j <= min(m, 2 * Ceil(i, k)); j++)
      for (int x = 0; x <= k; x++)
        for (int y = 0; y <= k; y++)
          if (dp[pre][j][x][y] > -oo) {
            int t = 0;
            if (x > 1) t |= a[i + 1];
            if (y > 1) t |= b[i + 1];
            update(dp[now][j][max(0, x - 1)][max(0, y - 1)],
                   dp[pre][j][x][y] + t);
            if (j + 1 <= m) {
              update(dp[now][j + 1][k][max(0, y - 1)],
                     dp[pre][j][x][y] + (t | a[i + 1]));
              update(dp[now][j + 1][max(0, x - 1)][k],
                     dp[pre][j][x][y] + (t | b[i + 1]));
            }
            if (j + 2 <= m)
              update(dp[now][j + 2][k][k],
                     dp[pre][j][x][y] + (a[i + 1] | b[i + 1]));
          }
    pre ^= 1;
    now ^= 1;
  }
  printf("%d\n", ans);
  return 0;
}
