program kuriai_metu_savaitei_priklauso_diena;
  { 16 u‘davinys }
{----------------------------------------------------------}
  type metai = 1583..5000;  { Grigaliaus kalendorius }
       data = record
                mt    : metai;
                men   : 0..12;
                diena : 0..31
              end;

  function savaite (dt : data) : integer;
    var trukme : integer;
    function kel (m : metai) : boolean;
      { ar metai m keliamieji }
    begin
      kel := (m mod 400 = 0) or
             (m mod 100 <> 0) and
             (m mod 4 = 0)
    end;
    function pir_sav_dien (m : metai) : integer;
      { randa pirm…j… met— savait‚s dien… }
      var mt   : metai; { pasirenkami metai, kuri— }
                      { pirmoji diena : sekmadienis }
          d, i : integer;
    begin
      mt := 1978; { pasirenkami metai }
      { kuri— pirmoji savait‚s diena yra sekmadienis}
      d := 7;
      for i := mt - 1 downto m do  { jei duoti metai yra ankstesni }
          if kel (i)
             then d := ((d - 2) + 7) mod 7
             else d := ((d - 1) + 7) mod 7;
      for i := mt to m - 1 do  { jei duoti metai yra v‚lesni }
          if kel (i)
             then d := (d + 2) mod 7
             else d := (d + 1) mod 7;
      if d = 0
         then d := 7;
      pir_sav_dien := d
    end;

    function d_men (dt : data) : integer;
      { kiek dien— turi duot— met— duotas m‚nuo }
    begin
      case dt.men of
        4, 6, 9, 11 : d_men := 30;
        2           : if kel (dt.mt)
                         then d_men := 29
                         else d_men := 28;
        else          d_men := 31
      end
    end;
    function d_sk (dt : data) : integer;
      { randa duotos dienos numer¨ nuo met— prad‘ios }
      var dienos : integer;
          t : data;
    begin
      dienos := 0;
      t := dt;
      for t.men := 1 to (dt.men - 1) do
          dienos := dienos + d_men (t);
      d_sk := dienos + dt.diena
    end;
  begin
    trukme := 7 - pir_sav_dien (dt.mt) + 1;
    if d_sk (dt) > trukme
       then savaite := (d_sk (dt) - trukme - 1) div 7 + 2
       else savaite := 1
  end;
{----------------------------------------------------------}
  var dt : data;
begin
  write ('­veskite duot… dat…: ');
  readln (dt.mt, dt.men, dt.diena);
  writeln (savaite (dt))
end.