#include <bits/stdc++.h>
using namespace std;
int a[1005], b[1005], dp[2][1005][55][55];
int ab(int x) {
  if (x > 0) return x;
  return 0;
}
bool i2b(int x) { return x > 0; }
int b2i(bool x) { return x ? 1 : 0; }
int main() {
  int n, p, k, r1, r2;
  scanf("%d%d%d", &n, &p, &k);
  if (p > 2 * (n + k - 1) / k) p = 2 * (n + k - 1) / k;
  scanf("%d", &r1);
  for (int i = 0, x; i < r1; i++) {
    scanf("%d", &x);
    a[x] = 1;
  }
  scanf("%d", &r2);
  for (int i = 0, x; i < r2; i++) {
    scanf("%d", &x);
    b[x] = 1;
  }
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < n + 1; j++) {
      for (int l = 0; l < k + 1; l++) {
        for (int m = 0; m < k + 1; m++) {
          dp[i][j][l][m] = -0x3f;
        }
      }
    }
  }
  dp[0][0][0][0] = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= p; j++) {
      for (int x = 0; x < k; x++) {
        for (int y = 0; y < k; y++) {
          dp[i & 1][j + 1][k - 1][ab(y - 1)] =
              max(dp[i & 1][j + 1][k - 1][ab(y - 1)],
                  dp[~i & 1][j][x][y] + b2i(a[i] || i2b(y) && b[i]));
          dp[i & 1][j + 1][ab(x - 1)][k - 1] =
              max(dp[i & 1][j + 1][ab(x - 1)][k - 1],
                  dp[~i & 1][j][x][y] + b2i(b[i] || i2b(x) && a[i]));
          dp[i & 1][j][ab(x - 1)][ab(y - 1)] =
              max(dp[i & 1][j][ab(x - 1)][ab(y - 1)],
                  dp[~i & 1][j][x][y] + b2i(a[i] && i2b(x) || i2b(y) && b[i]));
        }
      }
    }
    memset(dp[~i & 1], -0x3f, sizeof(dp[~i & 1]));
  }
  int ans = 0;
  for (int j = 0; j <= p; j++) {
    for (int x = 0; x <= k; x++) {
      for (int y = 0; y <= k; y++) ans = max(dp[n & 1][j][x][y], ans);
    }
  }
  printf("%d\n", ans);
  return 0;
}
