#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=105;
bool vis[N][N][N];
long double dp[N][N][N];
long double func(ll a,ll b,ll c){
    if(a==100 || b==100 || c==100)return 0;
    if(vis[a][b][c])return dp[a][b][c];
    vis[a][b][c]=1;
    dp[a][b][c]+=((func(a+1,b,c)+1)*a*1.0)/(a+b+c+0.0);
    dp[a][b][c]+=((func(a,b+1,c)+1)*b*1.0)/(a+b+c+0.0);
    dp[a][b][c]+=((func(a,b,c+1)+1)*c*1.0)/(a+b+c+0.0);
    return dp[a][b][c];
}
int main(){
    ios_base:: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    ll a,b,c;cin>>a>>b>>c;
    cout<<fixed<<setprecision(18)<<func(a,b,c);
}

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using vin=vector<int>;
using vll=vector<long long>;
using vvin=vector<vector<int>>;
using vvll=vector<vector<long long>>;
using vstr=vector<string>;
using vvstr=vector<vector<string>>;
using vch=vector<char>;
using vvch=vector<vector<char>>;
using vbo=vector<bool>;
using vvbo=vector<vector<bool>>;
using vpii=vector<pair<int,int>>;
using pqsin=priority_queue<int,vector<int>,greater<int>>;
#define mp make_pair
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep2(i,s,n) for(int i=(s);i<(int)(n);i++)
#define all(v) v.begin(),v.end()
#define decp(n) cout<<fixed<<setprecision((int)n)
const ll inf=1e9+7;
const ll INF=1e18;
const ll mod=99824453;
vin dx={-1,0,1,0};
vin dy={0,1,0,-1};

int main(){
    int n;ll k,m;cin>>n>>k>>m;
    vvll dp(n+1,vll(510000));//dp[i][j]:1~iの中から各々k個まで使って総和をjにする通り数
    vvll res(n+1,vll(510000));//res[i][j]=dp[i][j]+dp[i][j-(i+1)]+dp[i][j-2(i+1)]+...+dp[i][j-k(i+1)]
    dp[0][0]=(ll)1;
    //rep(i,k+1)res[0][i]=(ll)1;
    rep2(i,1,n+1)rep(j,(i*(i+1)*k)/2+1){
        res[i][j%i]+=dp[i-1][j];
        res[i][j%i]%=m;
        if(j-(k+1)*i>=0){
            res[i][j%i]-=dp[i-1][j-(k+1)*i];
            if(res[i][j%i]<0)res[i][j%i]+=m;
        }
        dp[i][j]=res[i][j%i];
        /*dp[i][j]=res[i-1][j];//dp[i][j]=dp[i-1][j]+dp[i-1][j-i]+...+dp[i-1][j-ki]
        res[i][j]=dp[i][j];
        if(j-(i+1)>=0){
            res[i][j]+=res[i][j-(i+1)];
            res[i][j]%=m;
        }
        if(j-(k+1)*(i+1)>=0){
            res[i][j]-=dp[i][j-(k+1)*(i+1)];
            if(res[i][j]<0)res[i][j]+=m;
        }*/
    }
    ll ans;
    rep2(x,1,n+1){
        ans=(ll)0;
        rep2(i,1,(x*(x+1)*k)/2+1){
            ans+=(dp[x-1][i]*dp[n-x][i])%m;
            ans%=m;
        }
        ans*=k+(ll)1;ans%=m;
        ans+=k;ans%=m;
        cout<<ans<<endl;
    }
}