#include <bits/stdc++.h>
using namespace std;
const double E = 1e-8;
const int inf = (int)1e9;
int main() {
  int n, m, w;
  scanf("%d%d%d", &n, &w, &m);
  double r = m * 1.0 / n;
  bool res = true;
  if (m <= n) {
    vector<pair<int, double> > v[100];
    double f = 0;
    int j = 0;
    double por = n * 1.0 / m;
    for (int i = 0; i < n; i++) {
      double h = f + 1;
      if (h > por - E) {
        v[j].push_back(make_pair(i, por - f));
        j++;
        if (h - por > E) v[j].push_back(make_pair(i, h - por));
        f = h - por;
      } else {
        v[j].push_back(make_pair(i, 1));
        f = h;
      }
    }
    printf("YES\n");
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < (int)v[i].size(); j++)
        printf("%d %.10lf ", v[i][j].first + 1, v[i][j].second * w);
      printf("\n");
    }
  } else if ((n) % (m - n) != 0) {
    printf("NO\n");
  } else {
    int k = n / (m - n);
    int l = m / (k + 1);
    vector<pair<int, double> > v[100];
    for (int i = 0; i < l; i++) {
      for (int j = 0; j < k; j++)
        v[i * (k + 1) + j].push_back(make_pair(i * k + j, n * 1.0 / m));
      for (int j = 0; j < k; j++)
        v[i * (k + 1) + k].push_back(make_pair(i * k + j, (m - n) * 1.0 / m));
    }
    printf("YES\n");
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < (int)v[i].size(); j++)
        printf("%d %.10lf ", v[i][j].first + 1, v[i][j].second * w);
      printf("\n");
    }
  }
  return 0;
}
