#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int X = 0, w = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') w = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') X = X * 10 + c - '0', c = getchar();
  return X * w;
}
const int N = 100000 + 10;
int n, p, k;
struct data {
  int a, b, id;
} a[N];
inline int cmp(data a, data b) {
  if (a.b != b.b)
    return a.b < b.b;
  else
    return a.a > b.a;
}
bool operator<(data a, data b) { return a.a > b.a; }
priority_queue<int, vector<int>, greater<int> > Q;
priority_queue<data> Q2;
long long sa[N], sb[N];
long long ansa, ansb;
int anspos;
int main() {
  n = read(), p = read(), k = read();
  for (register int i = 1; i <= n; ++i) a[i] = (data){read(), read(), i};
  sort(a + 1, a + n + 1, cmp);
  for (register int i = 1; i <= n; ++i) sb[i] = sb[i - 1] + a[i].b;
  for (register int i = n; i >= n - k + 1; --i)
    Q.push(a[i].a), sa[i] = sa[i + 1] + a[i].a;
  for (register int i = n - k; i >= 1; --i) {
    sa[i] = sa[i + 1];
    if (a[i].a > Q.top()) {
      sa[i] -= Q.top(), Q.pop();
      sa[i] += a[i].a, Q.push(a[i].a);
    }
  }
  for (register int i = p - k; i <= n - k + 1; ++i) {
    long long na = sa[i + 1], nb = sb[i] - sb[i - (p - k)];
    if (na > ansa)
      ansa = na, ansb = nb, anspos = i;
    else if (na == ansa && nb > ansb)
      ansb = nb, anspos = i;
  }
  for (register int i = anspos - (p - k) + 1; i <= anspos; ++i)
    printf("%d ", a[i].id);
  for (register int i = n; i >= n - k + 1; --i) Q2.push(a[i]);
  for (register int i = n - k; i > anspos; --i)
    if (a[i].a > Q2.top().a) Q2.pop(), Q2.push(a[i]);
  while (Q2.size()) printf("%d ", Q2.top().id), Q2.pop();
  puts("");
  return 0;
}
