#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
bool umin(T1& x, const T2& y) {
  return y < x ? x = y, true : false;
}
template <typename T1, typename T2>
bool umax(T1& x, const T2& y) {
  return x < y ? x = y, true : false;
}
const int N = (int)1e6 + 7;
const int mod = (int)1e9 + 7;
const int INF = (int)1e9 + 17;
const long long LLINF = (long long)1e18 + 17;
int n, m, k, s;
int a[N];
int b[N];
int cnt[N];
int need[N];
vector<int> pos[N];
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr), cout.tie(nullptr);
  cin >> m >> k >> n >> s;
  int c = m - n * k;
  for (int i = (0); i < (m); ++i) {
    cin >> a[i];
    pos[a[i]].push_back(i);
  }
  vector<int> diff;
  for (int i = (0); i < (s); ++i) {
    cin >> b[i];
    ++need[b[i]];
    diff.push_back(b[i]);
  }
  sort((diff).begin(), (diff).end());
  diff.erase(unique((diff).begin(), (diff).end()), diff.end());
  for (int i = 0; i < m; i += k) {
    int l = i, r = min(m - 1, i + k + c - 1);
    if (r - l + 1 < k) break;
    bool ok = true;
    for (int x : diff) {
      int cnt = upper_bound((pos[x]).begin(), (pos[x]).end(), r) -
                lower_bound((pos[x]).begin(), (pos[x]).end(), l);
      if (cnt < need[x]) {
        ok = false;
        break;
      }
    }
    if (ok) {
      cout << c << endl;
      for (int j = (l); j < (r + 1); ++j) {
        if (c == 0) break;
        if (need[a[j]] == 0) {
          cout << j + 1 << ' ';
          --c;
        } else
          --need[a[j]];
        if (c == 0) break;
      }
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
