#include <bits/stdc++.h>
using namespace std;
long long solve(vector<long long>& a, long long k, long long s, long long n) {
  long long i, tmp, res;
  res = 0;
  for (i = 0; i < n; i++) {
    tmp = a[i] - 1 - s;
    if (tmp >= 0) {
      tmp = sqrt(tmp / 3.0);
      if (a[i] - 3 * tmp * tmp - 3 * tmp - 1 < s) {
        tmp--;
      }
      if (tmp >= a[i]) {
        tmp = a[i] - 1;
      }
      res += tmp + 1;
    }
  }
  if (res >= k) {
    return 1;
  }
  return 0;
}
long long bs(vector<long long>& a, long long k, long long l, long long h,
             long long n) {
  if (h > l) {
    long long m;
    m = ceil((h + l) / 2.0);
    if (solve(a, k, m, n)) {
      return bs(a, k, m, h, n);
    }
    return bs(a, k, l, m - 1, n);
  }
  return h;
}
int main() {
  std::ios::sync_with_stdio(false);
  long long n, k, i, res, tmp, s;
  cin >> n >> k;
  vector<long long> a(n), b(n);
  for (i = 0; i < n; i++) {
    cin >> a[i];
  }
  res = bs(a, k, -4E18, 4E18, n);
  s = 0;
  for (i = 0; i < n; i++) {
    tmp = a[i] - 1 - res;
    if (tmp >= 0) {
      tmp = sqrt(tmp / 3.0);
      if (a[i] - 3 * tmp * tmp - 3 * tmp - 1 < res) {
        tmp--;
      }
      if (tmp >= a[i]) {
        tmp = a[i] - 1;
      }
      b[i] = tmp + 1;
      s += tmp + 1;
    }
  }
  if (s > k) {
    for (i = 0; i < n; i++) {
      tmp = b[i] - 1;
      if (a[i] - 3 * tmp * tmp - 3 * tmp - 1 == res) {
        b[i]--;
        s--;
        if (s == k) {
          break;
        }
      }
    }
  }
  for (i = 0; i < n; i++) {
    cout << b[i] << ' ';
  }
  return 0;
}
