#include <bits/stdc++.h>
using namespace std;
int DEBUG = 0;
double Min(double a, double b) { return (a < b ? a : b); }
double Max(double a, double b) { return (a > b ? a : b); }
double Abs(double a) { return (a >= 0 ? a : -a); }
void print1d(int *vec, int M, const char *str = NULL) {
  if (str != NULL) printf("%s ", str);
  for (int i = 0; i < M; i++) {
    if (i > 0) printf(" ");
    printf("%d", vec[i]);
  }
  printf("\n");
}
struct NODE {
  int id, m, v;
};
int compare_NODE_speed_dec(const void *a_, const void *b_) {
  NODE *a = (NODE *)a_;
  NODE *b = (NODE *)b_;
  if (a->v < b->v)
    return 1;
  else if (a->v > b->v)
    return -1;
  else
    return 0;
}
int compare_NODE_weight_inc(const void *a_, const void *b_) {
  NODE *a = (NODE *)a_;
  NODE *b = (NODE *)b_;
  if (a->m > b->m)
    return 1;
  else if (a->m < b->m)
    return -1;
  else if (a->v > b->v)
    return 1;
  else if (a->v < b->v)
    return -1;
  else
    return 0;
}
int n, k, h;
NODE lem[100010];
int out[100010];
bool doable(double t) {
  int nvalid = 0;
  for (int i = 1; i <= n; i++) {
    if ((1.0 * h * (nvalid + 1) / lem[i].v) <= t) {
      out[nvalid++] = lem[i].id;
      if (nvalid == k) return true;
    }
  }
  return false;
}
int main(int argc, char **argv) {
  DEBUG = (argc >= 2) ? atoi(argv[1]) : 0;
  cin >> n >> k >> h;
  h = 1;
  double tmin = 1.0e10, tmax = 0;
  for (int i = 1; i <= n; i++) {
    cin >> lem[i].m;
    lem[i].id = i;
  }
  for (int i = 1; i <= n; i++) {
    cin >> lem[i].v;
    tmin = Min(tmin, 1.0 * h / lem[i].v);
    tmax = Max(tmax, 1.0 * k * h / lem[i].v);
  }
  if (DEBUG) {
    cout << "tmin= " << tmin << " tmax= " << tmax << endl;
  }
  qsort(lem + 1, n, sizeof(NODE), compare_NODE_weight_inc);
  if (DEBUG) {
    for (int i = 1; i <= n; i++) {
      cout << "i= " << i << " id= " << lem[i].id << " m= " << lem[i].m
           << " v= " << lem[i].v << endl;
    }
  }
  for (int iter = 0; iter < 100; iter++) {
    double tmid = (tmin + tmax) / 2.0;
    if (doable(tmid)) {
      tmax = tmid;
    } else {
      tmin = tmid;
    }
    if (DEBUG) {
      cout << "tmin= " << tmin << " tmid= " << tmid << " tmax= " << tmax
           << endl;
    }
  }
  doable(tmax);
  for (int i = 0; i < k; i++) {
    if (i > 0) cout << " ";
    cout << out[i];
  }
  cout << endl;
  if (DEBUG) {
    cout << "sizeof(double)= " << sizeof(double) << endl;
    cout << "sizeof(long double)= " << sizeof(long double) << endl;
    cout << "numeric_limits<double>::min()= " << numeric_limits<double>::min()
         << endl;
    cout << "numeric_limits<double>::max()= " << numeric_limits<double>::max()
         << endl;
    cout << "numeric_limits<long double>::min()= "
         << numeric_limits<long double>::min() << endl;
    cout << "numeric_limits<long double>::max()= "
         << numeric_limits<long double>::max() << endl;
  }
  return 0;
}
