#include <bits/stdc++.h>
using namespace std;
struct Scroll {
  int iPow, iDmg, iIndex, iDelta;
};
list<Scroll> scrolls;
queue<Scroll> used;
int iHP, iMaxHp, iReg, iScrolls, iDPS = 0;
bool ByDMG(Scroll& s1, Scroll& s2) { return s1.iDmg > s2.iDmg; }
bool Tick(int iSecond) {
  list<Scroll>::iterator itr;
  int iDeltaHP;
  bool bScrollUsed = false;
  iDeltaHP = -iDPS + iReg;
  iHP = min(iMaxHp, iHP + iDeltaHP);
  if (iHP <= 0) return true;
  for (itr = scrolls.begin(); itr != scrolls.end();)
    if ((double)iHP / iMaxHp * 100 <= itr->iPow) {
      list<Scroll>::iterator itrTemp = itr++;
      bScrollUsed = true;
      iDPS += itrTemp->iDmg;
      itrTemp->iDelta = iSecond;
      used.push(*itrTemp);
      scrolls.erase(itrTemp);
      break;
    } else
      ++itr;
  return bScrollUsed || iDeltaHP < 0;
}
int main() {
  scanf("%i%i%i", &iScrolls, &iMaxHp, &iReg);
  Scroll temp;
  for (int iScroll = 1; iScroll <= iScrolls; ++iScroll) {
    scanf("%i%i", &temp.iPow, &temp.iDmg);
    temp.iIndex = iScroll;
    scrolls.push_back(temp);
  }
  scrolls.sort(ByDMG);
  int iDelta = 0;
  iHP = iMaxHp;
  while (Tick(iDelta++) && iHP > 0)
    ;
  if (iHP <= 0) {
    printf("YES\n");
    printf("%i %i\n", iDelta - 1, used.size());
    while (!used.empty()) {
      printf("%i %i\n", used.front().iDelta, used.front().iIndex);
      used.pop();
    }
  } else
    printf("NO\n");
  return 0;
}
