#include <bits/stdc++.h>
using namespace std;
const long long int INF = (long long int)(8e18);
const long long int MOD = 1e9 + 7;
const int maxn = 500010;
int m, k, n, s;
int a[maxn], b[maxn];
vector<pair<int, int> > v, t;
vector<int> ans, tpp;
set<int> q;
map<int, int> mp, tp;
bool find(int x) {
  int l = 0, r = (int)tpp.size() - 1;
  while (l <= r) {
    int mid = l + (r - l) / 2;
    if (tpp[mid] > x) {
      r = mid - 1;
    } else if (tpp[mid] < x)
      l = mid + 1;
    else
      return true;
  }
  return false;
}
void Empty() {
  t.clear();
  q.clear();
  tp.clear();
}
bool Possible(int h) {
  Empty();
  assert(q.empty() == true);
  for (auto i : tpp) {
    q.insert(i);
  }
  for (int i = 1; i <= h; i++) {
    if (find(a[i])) {
      tp[a[i]]++;
      if (tp[a[i]] >= mp[a[i]] && q.find(a[i]) != q.end()) {
        q.erase(a[i]);
      }
    }
  }
  if (q.empty()) {
    t.push_back(make_pair(1, h));
  }
  for (int i = h + 1; i <= m; i++) {
    if (find(a[i])) {
      tp[a[i]]++;
      if (tp[a[i]] >= mp[a[i]] && q.find(a[i]) != q.end()) {
        q.erase(a[i]);
      }
    }
    if (find(a[i - h])) {
      tp[a[i - h]]--;
      if (tp[a[i - h]] < mp[a[i - h]] && q.find(a[i - h]) == q.end()) {
        q.insert(a[i - h]);
      }
    }
    if (q.empty()) {
      t.push_back(make_pair(i - h + 1, i));
    }
  }
  return t.empty() == false;
}
bool check() {
  for (auto i : v) {
    int req = i.second - i.first + 1 - k;
    req += (i.first - 1) % k;
    if (req <= m - k * n) {
      tp.clear();
      for (int j = i.first; j <= i.second; j++) tp[a[j]]++;
      for (int j = 1; j <= (i.first - 1) % k; j++) {
        ans.push_back(j);
      }
      req -= (i.first - 1) % k;
      for (int j = i.first; j <= i.second; j++) {
        if (req <= 0) break;
        if (find(a[j]) == false) {
          ans.push_back(j);
          req--;
        } else {
          if (tp[a[j]] > mp[a[j]]) {
            tp[a[j]]--;
            req--;
            ans.push_back(j);
          }
        }
      }
      return false;
    }
  }
  return true;
}
int main() {
  ios ::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> m >> k >> n >> s;
  for (int i = 1; i <= m; i++) cin >> a[i];
  for (int i = 1; i <= s; i++) {
    cin >> b[i];
    mp[b[i]]++;
    tpp.push_back(b[i]);
  }
  sort(tpp.begin(), tpp.end());
  tpp.erase(unique(tpp.begin(), tpp.end()), tpp.end());
  int l = k, r = m;
  while (l <= r) {
    int mid = l + (r - l) / 2;
    if (Possible(mid)) {
      v = t;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  if (v.empty() || check()) {
    cout << -1 << '\n';
    return 0;
  }
  cout << (int)ans.size() << '\n';
  for (int i : ans) cout << i << ' ';
  cout << '\n';
}
