// Задача "Награды"
// Шестая Интернет-олимпиада сезона 2009-2010, усложненный уровень
// Автор задачи: Рустам Ганеев, ganeev@rain.ifmo.ru
// Автор решения: Сергей Поромов, poromov@rain.ifmo.ru

var
  d, x, y : int64;
  n, m, k : integer;

procedure egcd(a, b : int64);
var
  x1, x2, y1, y2, q, t : int64;
begin
  x := 1;
  y := 0;
  x1 := 0;
  y1 := 1;
  while (b > 0) do begin
    x2 := x1;
    y2 := y1;
    q := a div b;
    x1 := x - q * x1;
    y1 := y - q * y1;
    t := b;
    b := a mod b;
    a := t;
    x := x2;
    y := y2;
  end;
  d := a;
end;

function inverse(a, m : int64) : int64;
begin
  egcd(a, m);
  result := (x mod m + m) mod m;
end;

function cnk(n, k, m : integer) : int64;
var
  i : integer;
begin
  if k > n then begin
    result := 0;
    exit;
  end;
  result := 1;
  for i := k + 1 to n do begin
    result := result * i mod m;
  end;
  for i := 1 to n - k do begin
    result := result * inverse(i, m) mod m;
  end;
end;

begin
  reset(input, 'grants.in');
  rewrite(output, 'grants.out');
  read(n, k, m);
  writeln(cnk(n - k + 1, k, m));
end.
