#include <bits/stdc++.h>
struct point {
  int pow;
  int dmg;
  int num;
} str[1010];
int visit[1010];
int ans1[1010], ans2[1010];
int cmp(const void *a, const void *b) {
  struct point *aa = (struct point *)a;
  struct point *bb = (struct point *)b;
  return bb->pow - aa->pow;
}
int Min(int a, int b) { return a < b ? a : b; }
int main() {
  int n, max, res, i, j, k, t, temp = 0;
  scanf("%d %d %d", &n, &max, &res);
  memset(visit, 0, sizeof(visit));
  for (i = 1; i <= n; i++) {
    scanf("%d %d", &str[i].pow, &str[i].dmg);
    str[i].num = i;
  }
  qsort(&str[1], n, sizeof(str[1]), cmp);
  int now = max;
  int sum = 0;
  for (t = 0;; t++) {
    int tmp = -1, arr;
    now = Min(now - sum + res, max);
    if (now <= 0) break;
    for (i = 1; i <= n; i++) {
      if (now * 100 <= max * str[i].pow) {
        if (visit[i] == 0) {
          if (tmp < str[i].dmg) {
            tmp = str[i].dmg;
            arr = i;
          }
        }
      }
    }
    if (tmp == -1 && sum <= res) {
      printf("NO\n");
      break;
    }
    if (tmp != -1) {
      ans1[++temp] = t;
      ans2[temp] = str[arr].num;
      visit[arr] = 1;
      sum += str[arr].dmg;
    }
  }
  if (now <= 0) {
    printf("YES\n%d %d\n", t, temp);
    for (i = 1; i <= temp; i++) {
      printf("%d %d\n", ans1[i], ans2[i]);
    }
  }
}
