#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:260108864")
using namespace std;
pair<pair<int, int>, int> cs[100005];
int n, k, h;
bool can(double tm) {
  int nowh(k * h);
  int it(n - 1);
  while (it >= 0 && nowh) {
    if (nowh <= tm * cs[it].first.second ||
        abs(nowh - tm * cs[it].first.second) < 0.00000001) {
      nowh -= h;
    }
    --it;
  }
  if (nowh == 0) return true;
  return false;
}
int main() {
  scanf("%d%d%d", &n, &k, &h);
  double GOOD(1000000010.), BAD(0.);
  for (int i(0); i <= ((int)(n)-1); ++i) scanf("%d", &cs[i].first.first);
  for (int i(0); i <= ((int)(n)-1); ++i) scanf("%d", &cs[i].first.second);
  for (int i(0); i <= ((int)(n)-1); ++i) cs[i].second = i + 1;
  sort(cs, cs + n);
  for (int smth(0); smth <= ((int)(300) - 1); ++smth) {
    double med = (GOOD + BAD) / 2.;
    if (can(med))
      GOOD = med;
    else
      BAD = med;
  }
  if (can(BAD)) GOOD = BAD;
  vector<int> ans;
  int nowh(k * h);
  int it(n - 1);
  while (it >= 0 && nowh) {
    if (nowh <= GOOD * cs[it].first.second ||
        abs(nowh - GOOD * cs[it].first.second) < 0.00000001) {
      nowh -= h;
      ans.push_back(cs[it].second);
    }
    --it;
  }
  for (int i(0); i <= ((int)(((int)ans.size())) - 1); ++i) {
    if (i != 0) printf(" ");
    printf("%d", ans[((int)ans.size()) - i - 1]);
  }
  printf("\n");
  return 0;
}
