#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long INFLL = 1e18 + 7;
const long double EPS = 1e-9;
const int MAXN = 5e5 + 7;
mt19937 myRand(1337);
mt19937_64 myRand64(1337);
int cntNeed[MAXN], cntCur[MAXN];
int needGood = 0, cntGood = 0, cntTrash = 0;
void add(int x) {
  cntCur[x]++;
  if (cntCur[x] > cntNeed[x]) cntTrash++;
  if (cntNeed[x] > 0 && cntCur[x] == cntNeed[x]) cntGood++;
}
void del(int x) {
  if (cntCur[x] > cntNeed[x]) cntTrash--;
  cntCur[x]--;
  if (cntNeed[x] > 0 && cntCur[x] + 1 == cntNeed[x]) cntGood--;
}
signed main(void) {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int m, k, n, second;
  cin >> m >> k >> n >> second;
  vector<int> v(m);
  for (int i = 0; i < m; ++i) {
    cin >> v[i];
    v[i]--;
  }
  int x;
  for (int i = 0; i < second; ++i) {
    cin >> x;
    x--;
    if (cntNeed[x] == 0) needGood++;
    cntNeed[x]++;
  }
  int l = 0, r = -1;
  int ansD = -1, ansL, ansR;
  while (l < m) {
    while (r < m && ((cntGood != needGood) || (r - l + 1 < k) ||
                     (r - l + 1 - k > cntTrash))) {
      r++;
      if (r == m) break;
      add(v[r]);
    }
    if (cntGood == needGood) {
      int dels = (l % k) + (r - l + 1 - k);
      if ((m - dels) / k >= n) {
        ansD = dels;
        ansL = l;
        ansR = r;
        break;
      }
    }
    del(v[l]);
    l++;
  }
  if (ansD == -1) {
    cout << -1;
    return 0;
  }
  cout << ansD << endl;
  int z = ansL % k;
  for (int i = 0; i < z; ++i) cout << i + 1 << ' ';
  ansD -= z;
  if (ansD == 0) {
    return 0;
  }
  fill(&cntCur[0], &cntCur[0] + MAXN, 0);
  for (int i = l; i <= r; ++i) {
    int x = v[i];
    cntCur[x]++;
    if (cntNeed[x] == 0 || cntCur[x] > cntNeed[x]) {
      cntCur[x]--;
      cout << i + 1 << ' ';
      ansD--;
      if (ansD == 0) {
        return 0;
      }
    }
  }
}
