#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, neg = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') neg = -1;
    c = getchar();
  }
  while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
  return x * neg;
}
long long n, p, m;
struct data {
  long long cost, time, id;
} x[100005];
inline bool cmp1(data x, data y) {
  if (x.cost != y.cost) return x.cost > y.cost;
  return x.time < y.time;
}
inline bool cmp2(data x, data y) { return x.time > y.time; }
struct node {
  long long ch[2], val, sum, key, sz;
  inline void init() { ch[0] = ch[1] = val = sum = key = sz = 0; }
} s[100005];
long long cnt = 0, root = 0;
inline void init() {
  for (long long i = 0; i <= cnt; i++) s[i].init();
  cnt = root = 0;
}
inline void pushup(long long k) {
  s[k].sum = s[s[k].ch[0]].sum + s[k].val + s[s[k].ch[1]].sum;
  s[k].sz = s[s[k].ch[0]].sz + 1 + s[s[k].ch[1]].sz;
}
inline void split_v(long long k, long long v, long long &a, long long &b) {
  if (!k) {
    a = b = 0;
    return;
  }
  if (s[k].val <= v)
    a = k, split_v(s[k].ch[1], v, s[k].ch[1], b);
  else
    b = k, split_v(s[k].ch[0], v, a, s[k].ch[0]);
  pushup(k);
}
inline void split_s(long long k, long long rk, long long &a, long long &b) {
  if (!k) {
    a = b = 0;
    return;
  }
  if (rk > s[s[k].ch[0]].sz)
    a = k, split_s(s[k].ch[1], rk - s[s[k].ch[0]].sz - 1, s[k].ch[1], b);
  else
    b = k, split_s(s[k].ch[0], rk, a, s[k].ch[0]);
  pushup(k);
}
inline long long merge(long long a, long long b) {
  if (a == 0 || b == 0) return a + b;
  if (s[a].key < s[b].key)
    return s[a].ch[1] = merge(s[a].ch[1], b), pushup(a), a;
  else
    return s[b].ch[0] = merge(a, s[b].ch[0]), pushup(b), b;
}
inline void insert(long long x) {
  cnt++;
  s[cnt].val = x;
  s[cnt].sum = x;
  s[cnt].sz = 1;
  s[cnt].key = rand();
  s[cnt].ch[0] = s[cnt].ch[1] = 0;
  long long k1, k2;
  split_v(root, x, k1, k2);
  root = merge(merge(k1, cnt), k2);
}
long long mx[100005];
signed main() {
  n = read(), p = read(), m = read();
  for (long long i = 1; i <= n; i++)
    x[i].time = read(), x[i].cost = read(), x[i].id = i;
  sort(x + 1, x + n + 1, cmp1);
  for (long long i = 1; i <= m; i++) insert(x[i].time);
  mx[m] = s[root].sum;
  for (long long i = m + 1; i <= n - (p - m); i++) {
    insert(x[i].time);
    long long k1, k2;
    split_s(root, i - m, k1, k2);
    mx[i] = s[k2].sum;
    root = merge(k1, k2);
  }
  long long ans = 0, ind = 0;
  vector<long long> t;
  for (long long i = 1; i <= n - (p - m); i++)
    if (mx[i] > ans) ans = mx[i], ind = i;
  sort(x + 1, x + ind + 1, cmp2);
  for (long long i = 1; i <= m; i++) t.push_back(x[i].id);
  for (long long i = ind + 1; i <= ind + (p - m); i++) t.push_back(x[i].id);
  sort(t.begin(), t.end());
  for (long long i = 0; i < t.size(); i++) printf("%d ", t[i]);
  return 0;
}
