#include <bits/stdc++.h>
using namespace std;
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
inline void smax(int &x, int y) { x = max(x, y); }
inline void smin(int &x, int y) { x = min(x, y); }
ll gcd(ll a, ll b) { return ((b == 0) ? a : gcd(b, a % b)); }
const double PI = acos(-1.0l);
vector<long long> rev;
vector<complex<double> > omega;
void calc_rev(long long n, long long log_n) {
  rev.resize(n);
  omega.resize(n);
  for (long long i = 0; i < n; i++) {
    rev[i] = 0;
    for (long long j = 0; j < log_n; j++) {
      if ((i >> j) & 1) rev[i] |= 1 << (log_n - j - 1);
    }
  }
}
void fft(vector<complex<double> > &A, long long n, bool invert) {
  for (long long i = 0; i < n; i++) {
    if (i < rev[i]) swap(A[i], A[rev[i]]);
  }
  for (long long len = 2; len <= n; len <<= 1) {
    double ang = 2 * PI / len * (invert ? -1 : +1);
    long long half = (len >> 1);
    complex<double> curomega(cos(ang), sin(ang));
    omega[0] = complex<double>(1, 0);
    for (long long i = 1; i < half; i++) omega[i] = omega[i - 1] * curomega;
    for (long long i = 0; i < n; i += len) {
      complex<double> t;
      long long pu = i, pv = i + half, pu_end = i + half, pw = 0;
      for (; pu != pu_end; pu++, pv++, pw++) {
        t = A[pv] * omega[pw];
        A[pv] = A[pu] - t;
        A[pu] += t;
      }
    }
  }
  if (invert)
    for (long long i = 0; i < n; i++) A[i] /= n;
}
void multiply(long long n, vector<complex<double> > &A,
              vector<complex<double> > &B, vector<long long> &C) {
  fft(A, n, false);
  fft(B, n, false);
  for (long long i = 0; i < n; i++) A[i] *= B[i];
  fft(A, n, true);
  for (long long i = 0; i < n; i++) {
    C[i] = (long long)(A[i].real() + 0.5);
    C[i] = min(C[i], 1LL);
  }
}
void Solve(long long n, vector<long long> &coeffA, vector<long long> &coeffB,
           vector<long long> &result) {
  vector<complex<double> > A(n), B(n);
  for (long long i = 0; i < n; i++) A[i] = coeffA[i];
  for (long long i = 0; i < n; i++) B[i] = coeffB[i];
  multiply(n, A, B, result);
}
void do_FFT(vector<long long> &A, vector<long long> &B,
            vector<long long> &result) {
  long long n = 1, bits = 0;
  while (n < 2 * A.size() || n < 2 * B.size()) n <<= 1, bits++;
  result.resize(n, 0);
  calc_rev(n, bits);
  vector<long long> tempA(A.begin(), A.end());
  vector<long long> tempB(B.begin(), B.end());
  tempA.resize(n);
  tempB.resize(n);
  Solve(n, tempA, tempB, result);
}
vector<ll> polpow(vector<ll> &arr, long long k) {
  vector<ll> sol;
  while (k > 0) {
    if (k % 2) {
      if (sol.size() == 0)
        for (__typeof(arr.size()) i = (0) - ((0) > (arr.size()));
             i != (arr.size()) - ((0) > (arr.size()));
             i += 1 - 2 * ((0) > (arr.size())))
          sol.push_back(arr[i]);
      else
        do_FFT(sol, arr, sol);
    }
    do_FFT(arr, arr, arr);
    k = k / 2;
  }
  return sol;
}
int32_t main() {
  long long n, k;
  cin >> n >> k;
  vector<long long> v(n);
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n)))
    cin >> v[i];
  vector<ll> arr(1001);
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n))) {
    arr[v[i]] = 1;
  }
  while (arr.back() == 0) {
    arr.pop_back();
  }
  vector<ll> res = polpow(arr, k);
  for (__typeof(res.size()) i = (1) - ((1) > (res.size()));
       i != (res.size()) - ((1) > (res.size()));
       i += 1 - 2 * ((1) > (res.size()))) {
    if (res[i] > 0) cout << i << " ";
  }
}
