#include <bits/stdc++.h>
using namespace std;
int n, w, m;
int gcd(int a, int b) {
  if (a == 0 || b == 0) return a + b;
  return gcd(b, a % b);
}
vector<pair<int, double> > ans[100];
double c[110];
double p[110];
void print();
void solve1() {
  double p1 = 1.0 * w * n / (1.0 * m);
  for (int i = 0; i < int(n); i++) c[i] = w;
  for (int i = 0; i < int(m); i++) p[i] = p1;
  int t1 = 0, t2 = 0;
  for (;;) {
    if (t1 == n || t2 == m) {
      print();
      return;
    }
    if (c[t1] < p[t2]) {
      if (c[t1] > 0.00000001) ans[t2].push_back(make_pair(t1 + 1, c[t1]));
      p[t2] -= c[t1];
      t1++;
    } else {
      if (p[t2] > 0.0000001) ans[t2].push_back(make_pair(t1 + 1, p[t2]));
      c[t1] -= p[t2];
      t2++;
    }
  }
}
double abs1(double a) {
  if (a < 0) return -a;
  return a;
}
void solve() {
  int n1 = n, m1 = m;
  n1 /= gcd(n, m);
  m1 /= gcd(n, m);
  if (n >= m || m1 == n1 + 1)
    printf("YES\n");
  else {
    printf("NO");
    return;
  }
  if (n >= m || 2 * n == m || 3 * n == 2 * m) {
    solve1();
    return;
  }
  int k1 = m - 1;
  double k2 = 1.0 * w * n / (1.0 * m);
  for (int i = 0; i < int(n); i++) {
    ans[i].push_back(make_pair(i + 1, 1.0 * w * n / (1.0 * m)));
    ans[k1].push_back(make_pair(i + 1, w - 1.0 * w * n / (1.0 * m)));
    p[k1] += w - 1.0 * w * n / (1.0 * m);
    if (abs1(p[k1] - k2) < 0.000001) k1--;
  }
  print();
}
void print() {
  for (int i = 0; i < int(m); i++) {
    for (int j = 0; j < int(ans[i].size()); j++) {
      cout << ans[i][j].first << ' ';
      printf("%0.15f ", ans[i][j].second);
    }
    cout << endl;
  }
}
int main() {
  cin >> n >> w >> m;
  solve();
  return 0;
}
