#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int INF = 1234567890;
const int EPS = 1e-9;
inline int NUM(char c) { return (int)c - 48; }
inline char CHAR(int n) { return (char)(n + 48); }
template <class T>
inline T MAX(T a, T b) {
  if (a > b) return a;
  return b;
}
template <class T>
inline T MIN(T a, T b) {
  if (a < b) return a;
  return b;
}
inline void OPEN(const string &s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
int n, m, p, k;
pair<pair<int, int>, int> a[100000 + 5];
vector<pair<pair<int, int>, int> > w, u, v, ans;
bool p1(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
  if (a.first.first == b.first.first)
    return (a.first.second < b.first.second);
  else
    return a.first.first > b.first.first;
}
bool p2(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
  if (a.first.first == b.first.first)
    return (a.first.second > b.first.second);
  else
    return a.first.first > b.first.first;
}
bool p3(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
  if (a.first.second == b.first.second)
    return (a.first.first < b.first.first);
  else
    return a.first.second > b.first.second;
}
int main() {
  int i;
  scanf("%d %d %d", &n, &p, &k);
  for (i = 0; i < n; i++) {
    scanf("%d %d", &a[i].first.first, &a[i].first.second);
    a[i].second = i;
  }
  sort(a, a + n, p3);
  sort(a, a + n - p + k, p2);
  sort(a + k, a + n, p3);
  int ct = k;
  m = INF;
  for (i = 0; i < k; i++) {
    printf("%d\n", a[i].second + 1);
    m = min(m, a[i].first.second);
  }
  while (a[i].first.second >= m && n - i > p - k) i++;
  for (; ct < p; i++) {
    printf("%d\n", a[i].second + 1);
    ++ct;
  }
}
