#include <bits/stdc++.h>
using namespace std;
struct node {
  int m, v, id;
};
int n, k, h;
node a[100010];
vector<int> res;
bool cmp(const node &a, const node &b) {
  if (a.m != b.m)
    return a.m < b.m;
  else
    return a.v < b.v;
}
bool check(long double x) {
  int j = n - 1;
  for (int i = k; i >= 1; --i) {
    while (j >= 0 && (long double)i * (long double)h > x * (long double)a[j].v)
      j--;
    if (j < 0) return false;
    j--;
  }
  return true;
}
void pro(long double x) {
  int j = n - 1;
  for (int i = k; i >= 1; --i) {
    while (j >= 0 && (long double)i * (long double)h > x * (long double)a[j].v)
      j--;
    if (j < 0) return;
    res.push_back(j);
    j--;
  }
}
int main() {
  scanf("%d%d%d", &n, &k, &h);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i].m);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i].v);
    a[i].id = i + 1;
  }
  sort(a, a + n, cmp);
  long double ans;
  long double l = 0, r = 1000000000;
  for (int i = 0; i < 200; ++i) {
    ans = (l + r) / 2;
    if (check(ans))
      r = ans;
    else
      l = ans;
  }
  pro(r);
  if (res.size() == 0) {
    printf("%d\n", 1);
    return 0;
  }
  for (int i = k - 1; i > 0; --i) printf("%d ", a[res[i]].id);
  printf("%d\n", a[res[0]].id);
  return 0;
}
