#include <bits/stdc++.h>
using namespace std;
long long modulo(long long x, long long y) { return ((x % y) + y) % y; }
void find_remove(const vector<int>& all_flowers,
                 const vector<int>& selected_flowers, int start,
                 int window_size, int k) {
  std::unordered_map<int, int> fd;
  for (int f : selected_flowers) {
    ++fd[f];
  }
  int need_to_remove = window_size - k;
  if (!need_to_remove) {
    {
      cout << "0" << endl;
      return;
    };
  }
  cout << need_to_remove << "\n";
  for (int i = (start); i < (int)(window_size + start); i++) {
    const auto& it = fd.find(all_flowers[i]);
    if (it != fd.end() && it->second > 0) {
      --it->second;
    } else if (need_to_remove > 0) {
      std::cout << i + 1 << " ";
      --need_to_remove;
    }
  }
  std::cout << "\n";
}
void solve() {
  int m, k, n, s;
  cin >> m >> k >> n >> s;
  vector<int> all_flowers(m), selected_flowers(s);
  for (int i = 0; i < (int)(all_flowers).size(); i++) cin >> all_flowers[i];
  ;
  for (int i = 0; i < (int)(selected_flowers).size(); i++)
    cin >> selected_flowers[i];
  ;
  std::unordered_map<int, int> fd;
  for (int f : selected_flowers) {
    ++fd[f];
  }
  const int window_size = m - n * k + k;
  for (int(i) = 0; (i) < (window_size); (i)++) {
    auto it = fd.find(all_flowers[i]);
    if (it != fd.end()) {
      --it->second;
    }
  }
  std::unordered_set<int> nz;
  for (auto& it : fd) {
    if (it.second > 0) {
      nz.insert(it.first);
    }
  }
  for (int start = 0; start + window_size <= m; start += k) {
    if (start != 0) {
      for (int i = (start - k); i < (int)(start); i++) {
        auto it = fd.find(all_flowers[i]);
        if (it != fd.end()) {
          if (it->second == 0) {
            nz.insert(it->first);
          }
          ++it->second;
        }
      }
      for (int i = (start + window_size - k); i < (int)(start + window_size);
           i++) {
        auto it = fd.find(all_flowers[i]);
        if (it != fd.end()) {
          --it->second;
          if (it->second == 0) {
            nz.erase(it->first);
          }
        }
      }
    }
    if (nz.empty()) {
      find_remove(all_flowers, selected_flowers, start, window_size, k);
      return;
    }
  }
  {
    cout << "-1" << endl;
    return;
  };
}
int main() {
  ios_base::sync_with_stdio(0);
  solve();
  return 0;
}
