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

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

public class fib_mb {
    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(new File("fib.in"));
        int n = in.nextInt();
        int k = in.nextInt();
        int p = in.nextInt();
        in.close();

        assert 1 <= n && n <= 1000000 : "N is out of bounds";
        assert 1 <= k && k <= 1000000 : "K is out of bounds";
        assert 2 <= p && p <= 1000000000 : "P is out of bounds";

        int[] current = new int[k];
        Arrays.fill(current, 1);
        int sum = k % p;
        int point = 0;

        for (int t = k; t < n; t++) {
            point = (point + 1) % k;
            int val = sum;
            sum = (int) ((2L * sum - current[point] + 2L * p) % p);
            current[point] = val;
        }

        PrintWriter out = new PrintWriter("fib.out");
        out.println(current[point]);
        out.close();
    }
}