#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int inf = 1e9;
int dp[2][maxn][60][60];
int n, p, k;
int A[maxn];
int B[maxn];
void init() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < maxn; j++) {
      for (int a = 0; a < 55; a++) {
        for (int b = 0; b < 55; b++) {
          dp[i][j][a][b] = -inf;
        }
      }
    }
  }
  dp[0][0][0][0] = 0;
  memset(A, 0, sizeof(A));
  memset(B, 0, sizeof(B));
}
int main() {
  scanf("%d%d%d", &n, &p, &k);
  if (p > 2 * ((n + k - 1) / k)) p = 2 * ((n + k - 1) / k);
  init();
  int r;
  int x;
  scanf("%d", &r);
  for (int i = 1; i <= r; i++) {
    scanf("%d", &x);
    A[x] = 1;
  }
  int s;
  scanf("%d", &s);
  for (int i = 1; i <= s; i++) {
    scanf("%d", &x);
    B[x] = 1;
  }
  for (int i = 1; i <= n; i++) {
    int now = i & 1;
    int pre = !now;
    for (int j = 1; j <= p; j++) {
      dp[now][j][k - 1][0] =
          max(dp[now][j][k - 1][0], dp[pre][j - 1][0][0] + A[i]);
    }
    for (int j = 1; j <= p; j++) {
      for (int a = 0; a < k - 1; a++) {
        dp[now][j][a][0] = max(dp[now][j][a][0], dp[pre][j][a + 1][0] + A[i]);
      }
    }
    for (int j = 1; j <= p; j++) {
      dp[now][j][0][k - 1] =
          max(dp[now][j][0][k - 1], dp[pre][j - 1][0][0] + B[i]);
    }
    for (int j = 1; j <= p; j++) {
      for (int b = 0; b < k - 1; b++) {
        dp[now][j][0][b] = max(dp[now][j][0][b], dp[pre][j][0][b + 1] + B[i]);
      }
    }
    for (int j = 1; j <= p; j++) {
      for (int a = 0; a < k - 1; a++) {
        dp[now][j][a][k - 1] =
            max(dp[now][j][a][k - 1], dp[pre][j - 1][a + 1][0] + (A[i] | B[i]));
      }
    }
    for (int j = 1; j <= p; j++) {
      for (int b = 0; b < k - 1; b++) {
        dp[now][j][k - 1][b] =
            max(dp[now][j][k - 1][b], dp[pre][j - 1][0][b + 1] + (A[i] | B[i]));
      }
    }
    for (int j = 2; j <= p; j++) {
      for (int a = 0; a < k - 1; a++) {
        for (int b = 0; b < k - 1; b++) {
          dp[now][j][a][b] =
              max(dp[now][j][a][b], dp[pre][j][a + 1][b + 1] + (A[i] | B[i]));
        }
      }
    }
    for (int j = 0; j <= p; j++) {
      dp[now][j][0][0] = max(dp[now][j][0][0], dp[pre][j][0][0]);
    }
    for (int j = 0; j <= p; j++) {
      for (int a = 0; a < k; a++) {
        for (int b = 0; b < k; b++) {
          dp[pre][j][a][b] = -inf;
        }
      }
    }
  }
  int Max = -inf;
  for (int j = 0; j <= p; j++) {
    for (int a = 0; a < k; a++) {
      for (int b = 0; b < k; b++) {
        Max = max(Max, dp[n & 1][j][a][b]);
      }
    }
  }
  printf("%d\n", Max);
  return 0;
}
