#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T& a, const T& b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T& a, const T& b) {
  if (b > a) a = b;
}
template <class T>
inline T sqr(const T& a) {
  return a * a;
}
const int MAX = 1000 + 5;
int POW[MAX];
int DMG[MAX];
struct data {
  int pow;
  int dmg;
  int number;
  int seconds;
};
bool func_dec_pow_dmg(data i, data j) {
  return i.pow != j.pow ? i.pow > j.pow : i.dmg > j.dmg;
}
int main() {
  int N, max_h, reg;
  scanf("%d%d%d", &N, &max_h, &reg);
  vector<data> v;
  for (int i = 0, _n = (N); i < _n; ++i) {
    data d;
    scanf("%d%d", &d.pow, &d.dmg);
    d.number = i + 1;
    v.push_back(d);
  }
  sort(v.begin(), v.end(), func_dec_pow_dmg);
  vector<data> action;
  int total_decrease = 0;
  int current_health = max_h;
  bool win = false;
  int cur_clock = -1;
  while (true) {
    int new_health = current_health - total_decrease;
    new_health += reg;
    checkmin(new_health, max_h);
    cur_clock++;
    if (new_health <= 0) {
      win = true;
      break;
    }
    int ipos = -1;
    for (int i = 0, _n = (v.size()); i < _n; ++i)
      if (v[i].pow * max_h / 100.0 >= new_health) {
        if (ipos == -1 || v[i].dmg > v[ipos].dmg ||
            v[i].dmg == v[ipos].dmg && v[i].pow < v[ipos].pow) {
          ipos = i;
        }
      }
    if (ipos >= 0) {
      data d = v[ipos];
      v.erase(v.begin() + ipos);
      d.seconds = cur_clock;
      action.push_back(d);
      total_decrease += d.dmg;
    }
    if (ipos == -1 && new_health >= current_health) {
      break;
    }
    current_health = new_health;
  }
  if (win) {
    printf("YES\n%d %d\n", cur_clock, action.size());
    for (int i = 0, _n = (action.size()); i < _n; ++i)
      printf("%d %d\n", action[i].seconds, action[i].number);
  } else {
    printf("NO\n");
  }
  return 0;
}
