#include <bits/stdc++.h>
const int maxn = 500000 + 5;
int a[maxn], need[maxn];
int f[maxn];
std::vector<int> Q;
int is_useful(int cur) {
  if (cur && need[cur] && need[cur] == f[cur])
    return 1;
  else
    return 0;
}
int min(int a, int b) { return a > b ? b : a; }
int main() {
  int m, k, n, s;
  scanf("%d%d%d%d", &m, &k, &n, &s);
  for (int i = 1; i <= m; i++) scanf("%d", &a[i]);
  int task = 0;
  for (int i = 1; i <= s; i++) {
    int cur;
    scanf("%d", &cur);
    if (!need[cur]) task++;
    need[cur]++;
  }
  int head = 0, tail = 0, cnt = 0, un_cnt = 0;
  int ans = m + 1;
  while (head <= m && ans == m + 1) {
    if (is_useful(a[head]))
      cnt--;
    else {
      if (head) un_cnt--;
    }
    f[a[head]]--, head++;
    while (cnt < task && tail < m) {
      tail++;
      f[a[tail]]++;
      if (is_useful(a[tail]))
        cnt++;
      else
        un_cnt++;
    }
    if (cnt == task) {
      if (head / k == tail / k) {
        ans = 0;
        continue;
      }
      if (tail - head + 1 <= k) {
        int move = tail % k;
        if (move >= head || move > m - n * k || ans < move)
          continue;
        else {
          Q.clear();
          ans = move;
          for (int i = 1; i <= move; i++) Q.push_back(i);
        }
      } else {
        int move = (head - 1) % k;
        int delet = (tail - head + 1) - k;
        if (delet > un_cnt || delet + move > m - n * k || ans < move + delet ||
            move >= head)
          continue;
        else {
          Q.clear();
          ans = move + delet;
          for (int i = 1; i <= move; i++) Q.push_back(i);
          int add = 0;
          for (int i = head; i <= tail; i++) {
            if (!is_useful(a[i])) {
              f[a[i]]--;
              add++, Q.push_back(i);
              if (add == delet) break;
            }
          }
        }
      }
    }
  }
  printf("%d\n", ans == m + 1 ? -1 : ans);
  if (Q.size())
    for (int i = 0; i < Q.size(); i++) printf("%d ", Q[i]);
  if (Q.size()) printf("\n");
  return 0;
}
