#include <iostream>
#include <cmath>
#include <utility>
#include <list>
#include <map>
using
namespace
std;
map<
int
, list<pair<
int
,
int
> > > mymap;
map<
int
, list<pair<
int
,
int
> > >::iterator itr;
void
putpixelone(
int
m,
int
n,
int
p)
{
mymap[m].push_back(make_pair(n, p));
}
void
putpixelmiddle(
int
a,
int
b,
int
c,
int
x,
int
y,
int
z)
{
putpixelone(a + x, b + y, c + z);
putpixelone(a + x, b + y, -c + z);
putpixelone(a + x, c + y, b + z);
putpixelone(a + x, -c + y, b + z);
putpixelone(c + x, a + y, b + z);
putpixelone(-c + x, a + y, b + z);
}
void
putpixeldouble(
int
a,
int
b,
int
c,
int
x,
int
y,
int
z)
{
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, b + y, c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, b + y, c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, -b + y, c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, -b + y, c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, b + y, -c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, b + y, -c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, -b + y, -c + z);
swap(b, c);
swap(a, b);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, -b + y, -c + z);
swap(b, c);
swap(a, b);
}
}
void
putpixelsingle(
int
a,
int
b,
int
c,
int
x,
int
y,
int
z)
{
putpixelone(a + x, b + y, c + z);
putpixelone(-a + x, b + y, c + z);
putpixelone(a + x, -b + y, c + z);
putpixelone(-a + x, -b + y, c + z);
putpixelone(a + x, b + y, -c + z);
putpixelone(-a + x, b + y, -c + z);
putpixelone(a + x, -b + y, -c + z);
putpixelone(-a + x, -b + y, -c + z);
}
void
putpixeledge2(
int
a,
int
b,
int
c,
int
x,
int
y,
int
z)
{
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, b + y, c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, b + y, c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, -b + y, c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, -b + y, c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, b + y, -c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, b + y, -c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(a + x, -b + y, -c + z);
swap(a, b);
swap(b, c);
}
for
(
int
j = 0; j < 3; j++) {
putpixelone(-a + x, -b + y, -c + z);
swap(a, b);
swap(b, c);
}
}
void
putpixeledge1(
int
a,
int
b,
int
c,
int
x,
int
y,
int
z)
{
putpixelone(a + x, b + y, c + z);
putpixelone(a + x, c + y, b + z);
putpixelone(a + x, -b + y, c + z);
putpixelone(a + x, b + y, -c + z);
putpixelone(a + x, -b + y, -c + z);
putpixelone(a + x, -c + y, b + z);
putpixelone(a + x, c + y, -b + z);
putpixelone(a + x, -c + y, -b + z);
putpixelone(b + x, c + y, a + z);
putpixelone(b + x, a + y, c + z);
putpixelone(b + x, -c + y, a + z);
putpixelone(b + x, c + y, -a + z);
putpixelone(b + x, -c + y, -a + z);
putpixelone(b + x, a + y, -c + z);
putpixelone(b + x, -a + y, c + z);
putpixelone(b + x, -a + y, -c + z);
putpixelone(c + x, a + y, b + z);
putpixelone(c + x, -a + y, b + z);
putpixelone(c + x, a + y, -b + z);
putpixelone(c + x, -a + y, -b + z);
putpixelone(c + x, b + y, a + z);
putpixelone(c + x, -b + y, a + z);
putpixelone(c + x, b + y, -a + z);
putpixelone(c + x, -b + y, -a + z);
}
void
putpixelall(
int
a,
int
b,
int
c,
int
x,
int
y,
int
z)
{
putpixelone(a + x, b + y, c + z);
putpixelone(b + x, a + y, c + z);
putpixelone(c + x, b + y, a + z);
putpixelone(a + x, c + y, b + z);
putpixelone(c + x, a + y, b + z);
putpixelone(b + x, c + y, a + z);
putpixelone(-a + x, -b + y, c + z);
putpixelone(-b + x, -a + y, c + z);
putpixelone(c + x, -b + y, -a + z);
putpixelone(-a + x, c + y, -b + z);
putpixelone(c + x, -a + y, -b + z);
putpixelone(-b + x, c + y, -a + z);
putpixelone(a + x, -b + y, -c + z);
putpixelone(-b + x, a + y, -c + z);
putpixelone(-c + x, -b + y, a + z);
putpixelone(a + x, -c + y, -b + z);
putpixelone(-c + x, a + y, -b + z);
putpixelone(-b + x, -c + y, a + z);
putpixelone(-a + x, b + y, -c + z);
putpixelone(b + x, -a + y, -c + z);
putpixelone(-c + x, b + y, -a + z);
putpixelone(-a + x, -c + y, b + z);
putpixelone(-c + x, -a + y, b + z);
putpixelone(b + x, -c + y, -a + z);
putpixelone(-a + x, b + y, c + z);
putpixelone(b + x, -a + y, c + z);
putpixelone(c + x, b + y, -a + z);
putpixelone(-a + x, c + y, b + z);
putpixelone(c + x, -a + y, b + z);
putpixelone(b + x, c + y, -a + z);
putpixelone(a + x, -b + y, c + z);
putpixelone(-b + x, a + y, c + z);
putpixelone(c + x, -b + y, a + z);
putpixelone(a + x, c + y, -b + z);
putpixelone(c + x, a + y, -b + z);
putpixelone(-b + x, c + y, a + z);
putpixelone(a + x, b + y, -c + z);
putpixelone(b + x, a + y, -c + z);
putpixelone(-c + x, b + y, a + z);
putpixelone(a + x, -c + y, b + z);
putpixelone(-c + x, a + y, b + z);
putpixelone(b + x, -c + y, a + z);
putpixelone(-a + x, -b + y, -c + z);
putpixelone(-b + x, -a + y, -c + z);
putpixelone(-c + x, -b + y, -a + z);
putpixelone(-a + x, -c + y, -b + z);
putpixelone(-c + x, -a + y, -b + z);
putpixelone(-b + x, -c + y, -a + z);
}
void
drawsphere(
int
x,
int
y,
int
z,
int
r)
{
int
i = 0, j = 0;
int
k0 = r;
int
k = k0;
int
s0 = 0;
int
s = s0;
int
v0 = r - 1;
int
v = v0;
int
l0 = 2 * v0;
int
l = l0;
while
(i <= k) {
while
(j <= k) {
if
(s > v) {
k = k - 1;
v = v + l;
l = l - 2;
}
if
((j <= k) && ((s != v) || (j != k))) {
if
(i == 0 && j != 0)
putpixeledge1(i, j, k, x, y, z);
else
if
(i == j && j != k && i != 0)
putpixeledge2(i, j, k, x, y, z);
else
if
(i == j && j == k)
putpixelsingle(i, j, k, x, y, z);
else
if
(j == k && i < k && i < j)
putpixeldouble(i, j, k, x, y, z);
else
if
(i == 0 && j == 0)
putpixelmiddle(i, j, k, x, y, z);
else
putpixelall(i, j, k, x, y, z);
}
s = s + 2 * j + 1;
j = j + 1;
}
s0 = s0 + 4 * i + 2;
i = i + 1;
while
((s0 > v0) && (i <= k0)) {
k0 = k0 - 1;
v0 = v0 + l0;
l0 = l0 - 2;
}
j = i;
k = k0;
v = v0;
l = l0;
s = s0;
}
}
void
showallpoints(map<
int
, list<pair<
int
,
int
> > >& mymap)
{
int
count = 0;
for
(itr = mymap.begin(); itr != mymap.end(); ++itr) {
list<pair<
int
,
int
> > l = itr->second;
list<pair<
int
,
int
> >::iterator it;
for
(it = l.begin(); it != l.end(); ++it) {
cout << itr->first << ", " << get<0>(*it)
<< ", " << get<1>(*it) << endl;
count += 1;
}
}
cout << endl;
cout << count << endl;
}
int
main()
{
int
cx, cy, cz;
cin >> cx >> cy >> cz;
int
r;
cin >> r;
drawsphere(cx, cy, cz, r);
showallpoints(mymap);
}