1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "dzilib.h"

#include <ios>
#include <set>
#include <map>
#include <functional>
#include <cassert>
#include <vector>
#define REP(i, n) for(int i=0; i<(n); ++i)
#define SREP(n) REP(_ ## n, n)
#define FOR(i, p, n) for(int i=(p); i<=(n); ++i)
#define RFOR(i, p, n) for(int i=(p); i>=(n); --i)
#define pb push_back
#define eb emplace_back
#define C const
#define V std::vector
#define F std::function
#define R std::ranges
#define RV std::ranges::views
#define sz(A) int(A.size())
#define all(A) A.begin(), A.end()
#define rall(A) A.rbegin(), A.rend()
typedef long long ll;
typedef long double ld;
typedef V <int> vi;
typedef V <vi> vvi;
typedef V <bool> vb;
typedef V <char> vc;
typedef V <ll> vll;
typedef const int ci;
typedef const ll cll;
int main() {
  ci q = GetT();
  ci zapcap = GetQ();
  cll ycap = GetC();
  cll ncap = GetN();
  if (ncap<=int(1e6)){
      ci dl=17;
      ci n=int(ncap)+dl-1;
      vi dziel(n+1, 1);
      vi dzielkub(n+1);
      //int pop=0;
      FOR(i, 1, n){
          if (dziel[i]==1&&i>1){
              //printf("%d\n", i-pop);
              //pop=i;
              ++dziel[i];
              for (int j=i<<1; j<=n; j+=i){
                  int a=1;
                  int b=j;
                  while (!(b%i))
                      ++a,b/=i;
                  dziel[j]*=a;
              }
          }
          ++dzielkub[dziel[i]];
      }
      //printf("jo\n");
      //fflush(stdout);
      std::map <vi, int> mapa;
      FOR(i, 1, ncap){
          static vi a;
          a.clear();
          FOR(j, i, i+dl-1)
              a.eb(dziel[j]);
          mapa[a]=i;
      }
      //FOR(i, 1, 20){
      //    printf("nd=%d x %d\n", i, dzielkub[i]);
      //}
      SREP(q){
        static vi v;
        v.clear();
        REP(i, dl)
            v.eb(Ask(i));
        Answer(mapa[v]);
      }
      return 0;
  }
}