#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 15;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 9;
const int maxnode = 1e6 + 5;
struct node {
  int id, cnt;
  node() { id = cnt = 0; }
  node(int id, int cnt) : id(id), cnt(cnt) {}
  bool operator<(const struct node &rhs) const {
    return cnt != rhs.cnt ? cnt < rhs.cnt : id < rhs.id;
  }
};
set<int> S;
int a[maxn], b[maxn], tmp, cnt[maxn];
int rans[maxn];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int m, k, n, s, up = 0;
  cin >> m >> k >> n >> s;
  memset(rans, INF, sizeof(rans));
  for (int i = 1; i <= m; i++) cin >> a[i];
  for (int i = 1; i <= s; i++) {
    cin >> tmp;
    up = max(up, tmp);
    b[tmp]++;
  }
  for (int i = 1; i <= up; i++)
    if (b[i]) S.insert(i);
  for (int l = 1, r = 0; l <= m; l++) {
    if (l <= r) {
      cnt[a[l - 1]]--;
      if (cnt[a[l - 1]] < b[a[l - 1]]) S.insert(a[l - 1]);
    }
    while (r <= m) {
      if (S.empty()) {
        rans[l] = r;
        break;
      }
      r++;
      cnt[a[r]]++;
      if (cnt[a[r]] >= b[a[r]]) {
        S.erase(a[r]);
      }
    }
  }
  int ans = INF, flag = 0, fk = 0;
  for (int i = 1; i <= m; i++) {
    int rp = max(i + k - 1, rans[i]);
    if (rp > m) break;
    int tmp = rp - i + 1 - k;
    if (i - 1 > (n - 1) * k) {
      tmp += i - 1 - (n - 1) * k, flag = 1;
    } else {
      tmp += (i - 1) - (i - 1) / k * k, flag = 2;
    }
    if (m - tmp >= n * k) {
      ans = min(ans, tmp);
      memset(cnt, 0, sizeof(cnt));
      cout << ans << endl;
      if (flag == 1) {
        for (int w = (n - 1) * k + 1; w < i; w++) cout << w << " ";
      } else {
        for (int w = (i - 1) / k * k + 1; w < i; w++) {
          cout << w << " ";
        }
      }
      int tt = rp - i + 1 - k;
      for (int w = i; w <= rp && tt; w++) {
        if (b[a[w]] && cnt[a[w]] < b[a[w]]) {
          cnt[a[w]]++;
        } else if (tt) {
          cout << w << " ";
          tt--;
        }
      }
      return 0;
    }
  }
  cout << -1;
  return 0;
}
