#include <bits/stdc++.h>
static const int Size = 1e6;
int main(int argc, const char* argv[]) {
  int m, k, n, s;
  std::cin >> m >> k >> n >> s;
  std::vector<int> a(m);
  for (int i = 0; i < m; i++) std::cin >> a[i];
  std::set<int> set;
  std::vector<int> b(Size);
  std::vector<bool> used(m);
  for (int i = 0; i < s; i++) {
    int color;
    std::cin >> color;
    b[color]++;
    set.insert(color);
  }
  int right = 0, count = 0;
  std::vector<int> have(Size);
  for (int left = 0; left <= right; left++) {
    if (left > 0) {
      int color = a[left - 1];
      if (b[color] > 0 && have[color] == b[color]) count--;
      have[color]--;
    }
    for (; right < m; right++) {
      int color = a[right];
      if (!used[right]) {
        have[color]++;
        used[right] = true;
        if (have[color] == b[color]) count++;
      }
      int length = (right - left + 1);
      if (count == set.size() && length >= k) break;
    }
    int length = (right - left + 1);
    if (count == set.size() && length >= k) {
      int r0 = left / k;
      int r1 = (m - right - 1) / k;
      if (r0 + r1 + 1 >= n) {
        std::vector<int> result;
        for (int i = r0 * k; i < left; i++) result.push_back(i + 1);
        int remove = 0;
        for (int i = left; i <= right; i++) {
          int length = (right - left + 1) - remove;
          if (length == k) break;
          if (have[a[i]] > b[a[i]]) {
            remove++;
            have[a[i]]--;
            result.push_back(i + 1);
          }
        }
        for (int i = right + 1 + r1 * k; i < m; i++) result.push_back(i + 1);
        std::cout << result.size() << std::endl;
        for (int p : result) std::cout << p << " ";
        std::cout << std::endl;
        return 0;
      }
    }
  }
  std::cout << -1 << std::endl;
  return 0;
}
