#include <bits/stdc++.h>
using namespace std;
const int oo = ~0U >> 1;
const long double inf = 1e20;
const long double eps = 1e-15;
string name = "", in = ".in", out = ".out";
struct L {
  int m, v, idx;
  bool operator<(const L &o) const { return m < o.m || m == o.m && v < o.v; }
} lem[100008];
int n, k, h, minn = oo;
int ans[100008];
bool Check(long double time) {
  int pos = 1;
  for (int i = 1, tt = k; i <= tt; ++i) {
    while (pos <= n && (long double)i * h / lem[pos].v > time) pos++;
    if (pos > n) return false;
    pos++;
  }
  return true;
}
int main() {
  scanf("%d%d%d", &n, &k, &h);
  for (int i = 1, tt = n; i <= tt; ++i) scanf("%d", &lem[i].m);
  for (int i = 1, tt = n; i <= tt; ++i)
    scanf("%d", &lem[i].v), minn = min(lem[i].v, minn);
  for (int i = 1, tt = n; i <= tt; ++i) lem[i].idx = i;
  sort(lem + 1, lem + 1 + n);
  long double l = eps, r = (long double)h * k / minn, mid;
  for (int i = 1, tt = 300; i <= tt; ++i) {
    mid = (l + r) / 2;
    if (Check(mid))
      r = mid - eps;
    else
      l = mid + eps;
  }
  long double now = r + eps;
  int pos = 1;
  for (int i = 1, tt = k; i <= tt; ++i) {
    while (pos <= n && (long double)i * h / lem[pos].v > now) pos++;
    ans[i] = lem[pos++].idx;
  }
  for (int i = 1, tt = k - 1; i <= tt; ++i) printf("%d ", ans[i]);
  printf("%d\n", ans[k]);
  return 0;
}
