OI XXXIII - wyr

// https://sio2.mimuw.edu.pl/c/oi33-1/p/

#include <bits/stdc++.h>

// #define GARY_DBG
#define GARY_LIB

constexpr int sizik = 3 * 1001;

#define ar std::array

typedef std::vector<std::vector<int>> _kra;

#define int int64_t

int dp[sizik];

void get_divisors(std::vector<int>& d, int x) {
    int i = 1;
    while (i * i <= x) {
        if (x % i == 0) {
            d.push_back(i);
        }
        i++;
    }
}

void solve() {
    int n, a, b, c;
    std::cin >> n >> a >> b >> c;

    dp[1] = a;

    for (int i = 2; i <= n; i++) {
        dp[i] = INT64_MAX;

        for (int j = 1; j < i; j++) {
            int k = i - j;

            if (k < j) continue;

            dp[i] = std::min(dp[i], dp[j] + dp[k] + b);
        }

        std::vector<int> d;
        get_divisors(d, i);

        for (const auto& x : d) {
            int y = i / x;
            dp[i] = std::min(dp[i], dp[x] + dp[y] + c);
        }
    }

    for (int i = 1; i <= n; i++) {
        std::cout << dp[i] << " ";
    }
    std::cout << '\n';
}

int32_t main() {
#ifndef GARY_DBG
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);
#endif

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}