#include <bits/stdc++.h>
using namespace std;
struct order {
  int a, b, idx;
};
bool cmp(order x, order y) { return x.b < y.b || x.b == y.b && x.a > y.a; }
bool cmp2(order x, order y) { return x.a > y.a || x.a == y.a && x.b > y.b; }
bool cmp3(order x, order y) { return x.b > y.b; }
const int MaxN = 200005;
order a[MaxN];
int main() {
  int n, p, k;
  scanf("%d%d%d", &n, &p, &k);
  for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].a, &a[i].b), a[i].idx = i;
  sort(a + 1, a + n + 1, cmp);
  sort(a + p - k + 1, a + n + 1, cmp2);
  long long best = 0;
  for (int i = p - k + 1; i <= p; i++) best += a[i].a;
  sort(a + 1, a + n + 1, cmp);
  multiset<int> s;
  s.clear();
  int i;
  long long total = 0;
  for (i = n; i >= p - k + 1; i--) {
    if (i >= n - k + 1) {
      total += a[i].a;
      s.insert(a[i].a);
      if (total == best) break;
      continue;
    }
    if (*(s.begin()) < a[i].a) {
      total -= *(s.begin());
      total += a[i].a;
      s.erase(s.begin());
      s.insert(a[i].a);
    }
    if (total == best) break;
  }
  sort(a + 1, a + i, cmp3);
  sort(a + i + 1, a + n + 1, cmp2);
  for (int j = 1; j <= p - k; j++) printf("%d ", a[j].idx);
  for (int j = i; j <= i + k - 1; j++) printf("%d ", a[j].idx);
  return 0;
}
