#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define all(v) (v).begin(), (v).end() vii truncatePath(vii P, ld a) { if (a >= P.size()-1) return vii(P); vii T; ll k = (ll) a; a -= k; for (ll i = 0; i <= k; i++) { T.pb(P[i]); } T.eb(P[k].x*(1-a) + P[k+1].x*a, P[k].y*(1-a) + P[k+1].y*a); T.pb(P[P.size()-1]); return T; } ld pathLength(vii P) { ld res = 0; for (ll i = 0; i < P.size()-1; i++) { res += sqrt((P[i].x-P[i+1].x)*(P[i].x-P[i+1].x) + (P[i].y-P[i+1].y)*(P[i].y-P[i+1].y)); } return res; } void run() { ll n, m; ld l; cin >> n >> m >> l; vii P; for (ll i = 0; i < n; i++) { if (i%2 == 0) { P.eb(i, 0); P.eb(i, m); } else { P.eb(i, m); P.eb(i, 0); } } if (n%2 == 0) { P.eb(n, 0); P.eb(n, m); } else { P.eb(n, m); } ld lower = 0; ld upper = P.size()-1; for (ll i = 0; i < 1000; i++) { ld middle = (lower+upper)/2; if (pathLength(truncatePath(P, middle)) > l) { upper = middle; } else { lower = middle; } } P = truncatePath(P, lower); cout << P.size() << endl; for (ii p : P) { cout << p.x << " " << p.y << endl; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(20); run(); return 0; }