#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 0, num;
  char ch;
  while (ch = getchar(), !isdigit(ch))
    if (ch == '-') f = 1;
  num = ch - '0';
  while (ch = getchar(), isdigit(ch)) num = num * 10 + ch - '0';
  return f ? -num : num;
}
const int N = 5 * 1e5 + 3;
int vis[N], a[N], need[N], cnt[N], ans[N];
int main() {
  memset(vis, 0, sizeof(vis));
  int n, k, m, s;
  n = read();
  k = read();
  m = read();
  s = read();
  for (int i = 1; i <= n; i++) {
    a[i] = read();
  }
  int lsum, dsum;
  lsum = n - k * (m - 1);
  dsum = n - k * m;
  int type = 0;
  for (int i = 1; i <= s; i++) {
    int tt;
    tt = read();
    if (!need[tt]) {
      type++;
      vis[tt] = 1;
    }
    ++need[tt];
  }
  int f, num;
  f = 0;
  num = 1;
  for (int i = 1; i <= lsum; i++) {
    int tt = a[i];
    cnt[tt]++;
    if (vis[tt] && cnt[tt] == need[tt]) type--;
    if (type == 0) {
      num = 1;
      f = 1;
      break;
    }
  }
  if (!f)
    for (int i = lsum + 1; i <= n; i++) {
      int l = a[num];
      int r = a[i];
      num++;
      cnt[l]--;
      if (vis[l]) {
        if (cnt[l] == need[l] - 1) {
          type++;
        }
      }
      cnt[r]++;
      if (vis[r]) {
        if (cnt[r] == need[r]) {
          type--;
        }
      }
      if (type == 0 && (num - 1) % k == 0) {
        f = 1;
        break;
      }
    }
  int anss = 0;
  if (f) {
    for (int i = num; i < lsum + num; i++) {
      int tt = a[i];
      if (need[tt] > 0) {
        need[tt]--;
        continue;
      }
      if (anss == dsum) break;
      ans[++anss] = i;
    }
    printf("%d\n", anss);
    for (int i = 1; i <= anss; i++) {
      printf("%d%c", ans[i], i == anss ? '\n' : ' ');
    }
  } else
    printf("-1");
  return 0;
}
