#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
template <typename T>
istream& operator>>(istream& in, vector<T>& v) {
  for (auto& i : v) cin >> i;
  return in;
}
template <typename T>
ostream& operator<<(ostream& out, vector<T>& v) {
  for (auto& i : v) out << i << ' ';
  return out;
}
const int MAXN = int(1e5) * 5 + 10;
int need[MAXN];
long long sum_need = 0;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int m, k, n, s;
  cin >> m >> k >> n >> s;
  vector<int> a(m);
  multiset<int> nd;
  cin >> a;
  int cnt_need = 0;
  for (int i = 0; i < s; i++) {
    int x;
    cin >> x;
    nd.insert(x);
    if (need[x] == 0) cnt_need++;
    need[x]++;
  }
  int max_sz = k + (m - n * k);
  int could_del = (m - n * k);
  long long ans = 0;
  vector<int> vans;
  int r = k - 1;
  for (int i = 0; i < k; i++) {
    need[a[i]]--;
    if (need[a[i]] == 0) cnt_need--;
  }
  for (int l = 0; l < m; l++) {
    if (l == 3) l = l;
    while ((cnt_need != 0 || (r - l + 1) < k) && r < m - 1) {
      r++;
      need[a[r]]--;
      if (need[a[r]] == 0) cnt_need--;
    }
    if (r == m) break;
    int del = (m - n * k);
    int del_l = (l % k), del_mid = ((r - l + 1) - k);
    int del_all = (del_l + del_mid);
    del -= del_mid;
    del -= del_l;
    int get = (max(l, 0)) / k + (m - r - 1) / k;
    if (cnt_need == 0 && del >= 0 && get >= n - 1) {
      ans = del;
      int i = 0;
      while (del_l > 0) {
        vans.push_back(i++);
        del_l--;
      }
      i = n - 1;
      int sz = (r - l + 1);
      for (int i = l; i <= r && sz != k; i++) {
        if (nd.find(a[i]) != nd.end())
          nd.erase(nd.find(a[i]));
        else {
          sz--;
          vans.push_back(i);
        }
      }
      cout << del_all << '\n';
      sort(vans.begin(), vans.end());
      for (auto& i : vans) cout << i + 1 << ' ';
      return 0;
    }
    need[a[l]]++;
    if (need[a[l]] == 1) cnt_need++;
  }
  cout << -1;
  return 0;
}
