#include <bits/stdc++.h>
using namespace std;
const char el = '\n';
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);
  vector<vector<int>> occurrences(500001);
  for (int i = 0; i < m; ++i) {
    cin >> a[i];
    occurrences[a[i]].push_back(i);
  }
  vector<int> neededb(500001, 0);
  for (int i = 0; i < s; ++i) {
    int x;
    cin >> x;
    ++neededb[x];
  }
  int numneeded = 0;
  for (int b = 1; b <= 500000; ++b) {
    if (neededb[b] > 0) {
      ++numneeded;
    }
  }
  vector<int> dp(m);
  vector<int> have(500001, 0);
  int numattained = 0;
  for (int j = 0; j < m; ++j) {
    have[a[j]]++;
    if (have[a[j]] == neededb[a[j]]) ++numattained;
    if (numattained == numneeded) {
      dp[0] = j;
      break;
    }
  }
  if (numattained < numneeded) {
    cout << -1 << el;
    return 0;
  }
  for (int j = 1; j < m; ++j) {
    if (dp[j - 1] == m) {
      dp[j] = m;
      continue;
    }
    --have[a[j - 1]];
    if (have[a[j - 1]] >= neededb[a[j - 1]]) {
      dp[j] = dp[j - 1];
    } else {
      int needed = a[j - 1];
      auto it = upper_bound(occurrences[needed].begin(),
                            occurrences[needed].end(), dp[j - 1]);
      if (it == occurrences[needed].end()) {
        dp[j] = m;
      } else {
        dp[j] = *it;
        for (int i = dp[j - 1] + 1; i <= dp[j]; ++i) {
          ++have[a[i]];
        }
      }
    }
  }
  int maxdiscard = m - (n * k);
  int goodindex = 0;
  bool good = false;
  int discard1 = 0;
  int discard2 = 0;
  for (int i = 0; i < m; ++i) {
    int needdiscard = i % k;
    if (needdiscard > maxdiscard) continue;
    if (dp[i] == m) continue;
    int j = dp[i];
    int windowlen = j - i + 1;
    if (windowlen > k) {
      needdiscard += windowlen - k;
    }
    if (needdiscard <= maxdiscard) {
      good = true;
      discard1 = i % k;
      discard2 = 0;
      if (windowlen > k) {
        discard2 = windowlen - k;
      }
      goodindex = i;
      break;
    }
  }
  if (!good) {
    cout << -1 << el;
    return 0;
  }
  vector<int> discard{};
  for (int i = 0; i < discard1; ++i) {
    discard.push_back(i);
  }
  numattained = 0;
  fill(have.begin(), have.end(), 0);
  if (discard2 > 0) {
    int discarded = 0;
    for (int i = goodindex; i <= dp[goodindex]; ++i) {
      ++have[a[i]];
      if (discarded < discard2) {
        if (have[a[i]] > neededb[a[i]]) {
          ++discarded;
          discard.push_back(i);
        }
      }
    }
  }
  cout << discard.size() << el;
  for (auto y : discard) cout << y + 1 << " ";
  cout << el;
}
