#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
const int N = 500100;
int n, m, k, s, a[N], how[N], can;
vector<int> idx[N];
void no() {
  printf("-1");
  exit(0);
}
bool used[N];
map<int, int> mp;
void sol(int l, int r, int shift) {
  int all = (l - 1) / k;
  if (r - l + 1 < k) {
    int y = k - (r - l + 1);
    r += y;
  }
  all++;
  all += (m - r) / k;
  if (all < n) return;
  int rem = (r - l + 1) - k;
  int out = rem + shift;
  printf("%d\n", out);
  for (int i = 0, id = l - 1; i < shift; i++, id--) printf("%d ", id);
  for (int i = l; i <= r && rem; i++) {
    if (mp.count(a[i])) {
      if (mp[a[i]] == 1) {
        mp.erase(a[i]);
      } else
        mp[a[i]]--;
    } else {
      printf("%d ", i);
      rem--;
    }
  }
  exit(0);
}
int mx;
void fix(int i) {
  if (!used[a[i]]) return;
  how[a[i]]++;
  if (how[a[i]] == idx[a[i]].size()) no();
  mx = max(mx, idx[a[i]][how[a[i]]]);
}
int main() {
  scanf("%d %d %d %d", &m, &k, &n, &s);
  can = m - n * k;
  for (int i = 1; i <= m; i++) {
    scanf("%d", a + i);
    idx[a[i]].push_back(i);
  }
  memset(how, -1, sizeof how);
  for (int i = 1; i <= s; i++) {
    int x;
    scanf("%d", &x);
    used[x] = 1;
    mp[x]++;
  }
  for (auto x : mp) {
    if (idx[x.first].size() < x.second) no();
    how[x.first] = x.second - 1;
    mx = max(mx, idx[x.first][how[x.first]]);
  }
  int l = 1;
  while (1) {
    int shift = l % k;
    if (shift == 0) shift = k;
    shift -= 1;
    int inside = 0;
    if (mx - l + 1 > k) inside += ((mx - l + 1) - k);
    if (shift + inside <= can) sol(l, mx, shift);
    fix(l++);
  }
  no();
  return 0;
}
