#include <bits/stdc++.h>
using namespace std;
typedef struct _Worm {
  int id;
  int m, v;
  bool operator<(const _Worm& w) const {
    return this->m < w.m || (this->m == w.m && this->v < w.v);
  }
} Worm;
int k, n, h;
Worm worms[100100];
bool bisa(long double t) {
  int kk = 1;
  for (int(i) = (0), _n = (n - 1); (i) <= _n; (i)++) {
    if (kk > k) break;
    long double tt = ((long double)kk * (long double)h) / worms[i].v;
    if (tt <= t) kk++;
  }
  return kk > k;
}
void answer(long double t) {
  int kk = 1;
  for (int(i) = (0), _n = (n - 1); (i) <= _n; (i)++) {
    if (kk > k) break;
    long double tt = ((long double)kk * (long double)h) / worms[i].v;
    if (tt <= t) {
      printf("%d%c", worms[i].id, (kk == k) ? '\n' : ' ');
      kk++;
    }
  }
}
int main() {
  scanf("%d %d %d", &n, &k, &h);
  for (int(i) = (0), _n = (n - 1); (i) <= _n; (i)++) {
    worms[i].id = i + 1;
    scanf("%d", &worms[i].m);
  }
  for (int(i) = (0), _n = (n - 1); (i) <= _n; (i)++) {
    scanf("%d", &worms[i].v);
  }
  sort(worms, worms + n);
  long double left = 0, right = 1e9, mid;
  long double ans = 0;
  for (int(xxx) = (1), _n = (1000); (xxx) <= _n; (xxx)++) {
    mid = (left + right) / 2;
    if (bisa(mid)) {
      ans = mid;
      right = mid;
    } else
      left = mid;
  }
  answer(ans);
  for (int(i) = (0), _n = (1); (i) <= _n; (i)++) getchar();
  return 0;
}
