#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < (int)(n); i++)
#define REP(i,n) for (int i = 1; i < (int)(n); i++)
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define debug(var) do{cout << #var << " : "; view(var);}while(0)
template<class T> bool chmin(T &a, T b) {if(a>b) {a=b;return 1;}return 0;}
template<class T> bool chmax(T &a, T b) {if(a<b) {a=b;return 1;}return 0;}
using namespace std;
template<class T> void view(T e) {cout << e << endl;}
template<class T> void view(const vector<T> &v) {for(const auto &e : v){cout << e << " ";} cout << endl;}
template<class T> void view(const vector<vector<T>> &vv) {for(const auto &v : vv){view(v);}}
using vint = vector<int>;
using vvint = vector<vector<int>>;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
using P = pair<int,int>;
const int inf = 1<<30;
const ll inf_l = 1LL<<61;
const int MAX = 2 * 1e5 + 10;
const long double eps = 1e-10;

double a, b, r;

ll pow_l(ll x) {return x * x;};

bool in_circle(int x, int y) {
    ll la = round(a * 10000);
    ll lb = round(b * 10000);
    ll lr = round(r * 10000);
    ll lx = (ll)x * 10000;
    ll ly = (ll)y * 10000;
    return pow_l(ly - lb) <= pow_l(lr) - pow_l(lx - la);
}

int left_cnt(int x) {
    int ng = -MAX, ok = b;
    if (!in_circle(x, ok)) return 0;
    while (ng + 1 < ok) {
        int mid = (ok + ng) / 2;
        if (in_circle(x, mid)) ok = mid;
        else ng = mid;
    }
    return (int)b - ok + 1;
}   

int right_cnt(int x) {
    int ng = MAX, ok = b + 1;
    if (!in_circle(x, ok)) return 0;
    while (ok + 1 < ng) {
        int mid = (ok + ng) / 2;
        if (in_circle(x, mid)) ok = mid;
        else ng = mid;
    }
    return ok - (int)(b + 1) + 1;
}  

int main() {
    cin >> a >> b >> r;
    ll ans = 0;
    for (int x = -MAX; x <= MAX; x++) {
        ans += left_cnt(x) + right_cnt(x);
    }
    cout << ans << endl;
}
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define Mp make_pair
#define pb push_back

using ll = long long;
using db = double;
using pii = pair<int, int>;
using vi = vector<int>;
mt19937 mrand(time(0));
ll get(ll r) { return ((ll)mrand() * mrand() % r + r) % r; }
ll get(ll l, ll r) { return get(r - l + 1) + l; }

ll n, K, P, f[110][110*110*110], up;
signed main() {
    scanf("%lld %lld %lld", &n, &K, &P), up = K * n * (n - 1) / 2, f[0][0] = 1;
    for(int i = 1; i < n; i++) {
        for(int j = 0; j <= up; j++) {
            f[i][j] = f[i - 1][j];
            if(j >= i) (f[i][j] += f[i][j - i]) %= P;
        }
        for(int j = up; j >= (K + 1) * i; j--)
            (f[i][j] += P - f[i][j - (K + 1) * i]) %= P;
    }
    for(int i = 1; i <= n; i++) {
        ll nw = 0;
        for(int j = 0; j <= up; j++)
            (nw += f[i - 1][j] * f[n - i][j]) %= P;
        printf("%lld\n", (nw * (K + 1) % P - 1 + P) % P);
    }
    fprintf(stderr, "time=%.4f\n", (db)clock()/CLOCKS_PER_SEC);
    return 0;
}