// Задача "Обобщенные числа Фибоначчи"
// 12-ая Интернет-олимпиада сезона 2006-2007, базовый уровень
// Автор задачи: Федор Царев, tsarev@rain.ifmo.ru
// Автор решения: Федор Царев, tsarev@rain.ifmo.ru

// Медленное решение

import java.io.*;
import java.util.*;

public class fib_ft_tl implements Runnable {

	public final static int MAXN = (int) 1e6;
	public final static int MAXK = (int) 1e6;
	public final static int MAXP = (int) 1e9;

	private Scanner in;
	private PrintWriter out;
	String fname = "fib";

	private void myAssert(boolean e, String message) {
		if (!e) {
			throw new Error("Assertion failure!!! " + message);
		}
	}

	public void solve() {
		int n = in.nextInt();
		int k = in.nextInt();
		int p = in.nextInt();
		myAssert(1 <= n && n <= MAXN, "n < 1 || n > 1e6");
		myAssert(1 <= k && k <= MAXN, "k < 1 || k > 1e6");
		myAssert(2 <= p && p <= MAXP, "p < 2 || p > 1e9");
		int[] f = new int[n + k];
		for (int i = 0; i < k; i++) {
			f[i] = 1;
		}
		int sum = k % p;
		for (int i = k; i < n; i++) {
			f[i] = 0;
			for (int j = 1; j <= k; j++) {
				f[i] += f[i - j];
				f[i] %= p;
			}
		}

		out.println(f[n - 1]);

	}

	public void run() {
		try {
			solve();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			out.close();
		}		
	}

	public fib_ft_tl() {
		try {
			in = new Scanner(new File(fname + ".in"));
			out = new PrintWriter(new File(fname + ".out"));
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
	}


	public static void main(String[] args) {
		new Thread(new fib_ft_tl()).start();
	}

}