#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool Up(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool Down(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
inline int getint() {
  int tmp, c;
  while (tmp = getchar(), tmp < '0' || tmp > '9')
    ;
  tmp -= '0';
  while (c = getchar(), '0' <= c && c <= '9') tmp = tmp * 10 + c - '0';
  return tmp;
}
inline int getsigned() {
  int tmp, c, flag;
  while (flag = getchar(), flag != '-' && (flag < '0' || flag > '9'))
    ;
  if (flag == '-')
    tmp = 0;
  else
    tmp = flag - '0';
  while (c = getchar(), '0' <= c && c <= '9') tmp = tmp * 10 + c - '0';
  return flag == '-' ? -tmp : tmp;
}
struct lem {
  int m, v, id;
} L[100022];
inline bool operator<(const lem &a, const lem &b) {
  if (a.m != b.m) return a.m > b.m;
  return a.v > b.v;
}
int N, K, H;
__inline double Time(int i, int j) { return double(j) * H / L[i].v; }
void Init() {
  N = getint();
  K = getint();
  H = getint();
  for (int i = (1); i <= (N); ++i) L[i].id = i;
  for (int i = (1); i <= (N); ++i) L[i].m = getint();
  for (int i = (1); i <= (N); ++i) L[i].v = getint();
  sort(L + 1, L + N + 1);
}
bool Check(double t) {
  int cnt = 0;
  for (int i = (1); i <= (N); ++i)
    if (Time(i, K - cnt) <= t)
      if (++cnt == K) return true;
  return false;
}
int ans[100022];
void GetAns(double t) {
  int cnt = 0;
  for (int i = (1); i <= (N); ++i)
    if (Time(i, K - cnt) <= t) {
      ans[++cnt] = L[i].id;
      if (cnt == K) break;
    }
  printf("%d", ans[K]);
  for (int i = (K - 1); i >= (1); --i) printf(" %d", ans[i]);
  putchar('\n');
}
void Work() {
  int cnt = 128;
  double l = 0, r = 1e10;
  while (cnt--) {
    double m = (l + r) / 2;
    if (Check(m))
      r = m;
    else
      l = m;
  }
  GetAns(r);
}
int main() {
  Init();
  Work();
  return 0;
}
