#include <bits/stdc++.h>
using namespace std;
const double E = 1e-7;
inline int dblcmp(double x) {
  if (x > -E && x < E) return 0;
  return x > 0 ? 1 : -1;
}
vector<pair<int, double> > ans[60];
int main() {
  int n, w, m;
  scanf("%d%d%d", &n, &w, &m);
  if (2 * n < m)
    printf("NO\n");
  else {
    double need = (double)n * w / m;
    int cur = 1;
    double ctmp = w;
    for (int i = 1; i <= m; i++) {
      double tmp = need;
      while (dblcmp(tmp) > 0) {
        double ret = min(ctmp, tmp);
        ctmp -= ret;
        tmp -= ret;
        ans[i].push_back(make_pair(cur, ret));
        if (dblcmp(ctmp) <= 0) {
          cur++;
          ctmp = w;
        }
      }
    }
    int x = (int)floor(ctmp + 0.5);
    if (cur == n + 1 && x == w || (cur == n && x == 0)) {
      int cc[60] = {0};
      bool ok = true;
      for (int i = 1; i <= m; i++) {
        for (int j = 0; j < ans[i].size(); j++) {
          if (ans[i][j].first <= n && dblcmp(ans[i][j].second) > 0) {
            cc[ans[i][j].first]++;
            if (cc[ans[i][j].first] > 2) {
              ok = false;
            }
          }
        }
      }
      if (ok) {
        printf("YES\n");
        for (int i = 1; i <= m; i++) {
          bool be = true;
          for (int j = 0; j < ans[i].size(); j++) {
            if (ans[i][j].first <= n && dblcmp(ans[i][j].second) > 0) {
              if (!be) printf(" ");
              be = false;
              printf("%d %.10lf", ans[i][j].first, ans[i][j].second);
            }
          }
          printf("\n");
        }
      } else {
        printf("NO\n");
      }
    } else {
      printf("NO\n");
    }
  }
  return 0;
}
