#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:60777216")
using namespace std;
string filename = "input";
int n, k, h;
vector<pair<pair<int, int>, int> > v;
bool TimesCmp(const int& l, const int& r) {
  int vl = v[l].first.second;
  int vr = v[r].first.second;
  return vr < vl;
}
bool can(double t, vector<int>* res_v) {
  int j = n - 1;
  int left = k * h;
  const int max_height = k * h;
  while (left > 0 && j >= 0) {
    int cur_h = left * k;
    int cur_v = v[j].first.second;
    if (1.0 * left / cur_v <= t && 1.0 * left <= cur_v * t) {
      if (res_v != 0) {
        res_v->push_back(v[j].second);
      }
      left -= h;
    }
    --j;
  }
  return left == 0;
}
int main() {
  scanf("%d %d %d", &n, &k, &h);
  v.resize(n);
  for (int _n(n), i(0); i < _n; i++) {
    v[i].second = i + 1;
    scanf("%d", &v[i].first.first);
  }
  for (int _n(n), i(0); i < _n; i++) {
    scanf("%d", &v[i].first.second);
  }
  sort((v).begin(), (v).end());
  double low_lim = 0;
  double high_lim = 1e9 + rand() % 1000;
  for (int _n(100), test(0); test < _n; test++) {
    double mid = (low_lim + high_lim) / 2.0;
    if (can(mid, 0)) {
      high_lim = mid;
    } else {
      low_lim = mid;
    }
  }
  vector<int> vres;
  can(high_lim, &vres);
  reverse((vres).begin(), (vres).end());
  for (int _n(vres.size()), i(0); i < _n; i++) {
    if (i != 0) {
      printf(" ");
    }
    printf("%d", vres[i]);
  }
  printf("\n");
  return 0;
}
