#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 100;
const int INF = INT_MAX - 1;
struct info {
  int a, b, no;
};
info order[maxn];
vector<int> ans;
int n, p, k, buguan;
bool cmp_bukaixin_b_xiao(info a, info b) {
  if (a.b == b.b) {
    return a.a < b.a;
  }
  return a.b > b.b;
}
bool cmp_toufada_a(info a, info b) {
  if (a.a == b.a) {
    return a.b > b.b;
  }
  return a.a > b.a;
}
bool cmp(info a, info b) { return a.b > b.b; }
void solve() {
  buguan = p - k;
  sort(order, order + n, cmp_bukaixin_b_xiao);
  int nn = n - buguan;
  sort(order, order + nn, cmp_toufada_a);
  ans.clear();
  int limit_bukaixin = INF;
  int limit_toufa;
  for (int i = 0; i < k; i++) {
    ans.push_back(order[i].no);
    if (order[i].b < limit_bukaixin) {
      limit_bukaixin = order[i].b;
      limit_toufa = order[i].a;
    } else if (order[i].b == limit_bukaixin) {
      limit_toufa = max(order[i].a, limit_toufa);
    }
  }
  sort(order + k, order + n, cmp_bukaixin_b_xiao);
  int need = buguan;
  if (need != 0) {
    for (int i = k; i < n; i++) {
      if (order[i].b == limit_bukaixin) {
        if (order[i].a >= limit_toufa) {
          ans.push_back(order[i].no);
          need--;
        }
      } else if (order[i].b < limit_bukaixin) {
        ans.push_back(order[i].no);
        need--;
      }
      if (need == 0) {
        break;
      }
    }
  }
  for (int i = 0; i < ans.size(); i++) {
    printf("%d%c", ans[i] + 1, (i == ans.size() - 1 ? '\n' : ' '));
  }
}
int main() {
  while (scanf("%d%d%d", &n, &p, &k) != EOF) {
    for (int i = 0; i < n; i++) {
      scanf("%d%d", &order[i].a, &order[i].b);
      order[i].no = i;
    }
    solve();
  }
  return 0;
}
