#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 5;
const double EPS = 1e-6;
const long long INF = 1000000000 + 5;
const int MAXN2 = 2e5 + 5;
vector<pair<int, double> > g[MAXN];
double a[MAXN];
double c[MAXN], b[MAXN];
int main() {
  int n, w, m;
  cin >> n >> w >> m;
  int k = n / m;
  int n2 = n;
  int cur = 1;
  if (m > 2 * n) {
    printf("NO");
    return 0;
  }
  for (int i = 1; i <= n; i++) b[i] = w;
  if (n == m) {
    for (int i = 1; i <= m; i++) {
      for (int j = 0; j < k; j++) {
        g[i].push_back(make_pair(cur, w));
        cur++;
      }
    }
  } else {
    if (n < m) {
      double aw = (1. * n * w) / (1. * m);
      for (int i = 1; i <= n; i++) {
        g[i].push_back(make_pair(i, aw));
      }
      if (n % (m - n) != 0) {
        printf("NO");
        return 0;
      }
      int k = n / (m - n);
      int cur = 1;
      aw = w - aw;
      for (int i = n + 1; i <= m; i++) {
        for (int j = 0; j < k; j++) {
          g[i].push_back(make_pair(cur, aw));
          cur++;
        }
      }
    } else {
      double aw = (1. * n * w) / (1. * m);
      int cur = 1;
      for (int i = 1; i <= m; i++) {
        while (aw - c[i] > b[cur] + EPS) {
          g[i].push_back(make_pair(cur, b[cur]));
          c[i] += b[cur];
          cur++;
        }
        if (aw - c[i] < b[cur] + EPS) {
          double d = aw - c[i];
          g[i].push_back(make_pair(cur, d));
          if (abs(d - b[cur]) > EPS) {
            c[i + 1] += b[cur] - d;
            g[i + 1].push_back(make_pair(cur, b[cur] - d));
          }
          cur++;
        }
      }
    }
  }
  printf("YES\n");
  for (int i = 1; i <= m; i++) {
    int sz = g[i].size();
    for (int j = 0; j < sz; j++) {
      int v = g[i][j].first;
      double ans = g[i][j].second;
      printf("%d %.7lf ", v, ans);
    }
    printf("\n");
  }
  return 0;
}
