#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, w, m;
  double e, l, h, t;
  scanf("%d%d%d", &n, &w, &m);
  e = n * w / (double)m;
  bool good = false;
  double fill[m];
  memset(fill, 0, sizeof fill);
  vector<pair<int, double> > used[m];
  good = true;
  for (int j = 0; j < n; ++j) {
    double cap = w;
    int use = 0;
    for (int i = 0; i < m; ++i) {
      if (cap - 1e-8 <= 0) break;
      if (fill[i] + 1e-8 >= e) continue;
      double put = min(cap, e - fill[i]);
      if (use == 0) {
        ++use;
        cap -= put;
        fill[i] += put;
        used[i].push_back(make_pair(j + 1, put));
      } else if (cap - put < 1e-8) {
        cap -= put;
        fill[i] += put;
        used[i].push_back(make_pair(j + 1, put));
        break;
      }
    }
    if (cap - 1e-8 >= 0) {
      good = false;
      break;
    }
  }
  if (good) {
    printf("YES\n");
    for (int i = 0; i < m; ++i) {
      printf("%d %.6lf", used[i][0].first, used[i][0].second);
      for (int j = 1; j < used[i].size(); ++j) {
        printf(" %d %.6lf", used[i][j].first, used[i][j].second);
      }
      printf("\n");
    }
  }
  if (!good) printf("NO\n");
  return 0;
}
