#include <bits/stdc++.h>
using namespace std;
const int N=155;
int n,K,MD;
void add(int &x,int y) {
	x+=y;
	if(x>=MD) x-=MD;
}
int f[N][N];
void solve1() {
	K>>=1,f[0][0]=1;
	for(int i=1;i<=n;i++) {
		for(int j=0;j<=K;j++) add(f[i][0],f[i-1][j]);
		for(int j=0;j<K;j++) add(f[i][j+1],f[i-1][j]);
	}
	int s1=0,s2=0;
	for(int i=0;i<=K;i++) add(s1,f[n/2][i]);
	for(int i=0;i<=K;i++) add(s2,f[(n+1)/2][i]);
	printf("%d\n",1LL*s1*s2%MD);
}
int g[N*2][N][N];
void solve2() {
	int p;
	g[0][0][0]=1;
	for(int i=2;i-K<=n;i+=2) {
		for(int j=0;j<=n;j++) {//不选
			for(int k=0;k<=K+1;k++) {
				add(g[i][0][0],g[i-2][j][k]);
			}
		}
		if(i<=n) {//右
			for(int j=0;j<=n;j++) {
				for(int k=0;k<=K+1;k++) {
					add(g[i][j+1][0],g[i-2][j][k]);
				}
			}
		}
		if(i-K>=1) {//左
			for(int j=0;j<=n;j++) {
				for(int k=1;k<=K;k++) {
					add(g[i][0][k+1],g[i-2][j][k]);
				}
				add(g[i][0][0],g[i-2][j][0]);
			}
		}
		if(i<=n&&i-K>=1) {
			for(int j=0;j<=n;j++) {
				for(int k=0;max(k,j+1)<=K;k++) {
					add(g[i][j+1][max(k,j+1)+1],g[i-2][j][k]);
				}
			}
		}
		p=i;
	}
	int ans=0;
	for(int i=0;i<=n;i++) {
		for(int j=0;j<=K+1;j++) {
			add(ans,g[p][i][j]);
		}
	}
	printf("%d\n",ans);
}
int main() {
	scanf("%d%d%d",&n,&K,&MD);
	if(K%2==0) solve1();
	else solve2();
	return 0;
}