/** _ _ _____ ___
* _ __ _____ _(_) | ____ _|___ // _ \
* | '_ \ / _ \ \ / / | |/ /\ \ /\ / / |_ \ (_) |
* | | | | __/\ V /| | < \ V V / ___) \__, |
* |_| |_|\___| \_/ |_|_|\_\ \_/\_/ |____/ /_/
**/
#include <bits/extc++.h>
#ifndef nevikw39
#define nevikw39 cin.tie(nullptr), ios::sync_with_stdio(false)
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("abm,bmi,bmi2,mmx,sse,sse2,sse3,ssse3,sse4,popcnt,avx,avx2,fma,tune=native")
#pragma comment(linker, "/stack:200000000")
struct
{
template <typename T>
auto &operator<<(const T &x) { return *this; }
} __cerr;
#define cerr __cerr
#else
#pragma message("hello, nevikw39")
#endif
#pragma message("GL; HF!")
#define ALL(X) begin(X), end(X)
#define ST first
#define ND second
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
template <typename T, typename Cmp = less<T>, typename Tag = pairing_heap_tag>
using _heap = __gnu_pbds::priority_queue<T, Cmp, Tag>;
template <typename K, typename M = null_type, typename F = typename detail::default_hash_fn<K>::type>
using _hash = gp_hash_table<K, M, F>;
template <typename K, typename M = null_type, typename Cmp = less<K>, typename T = rb_tree_tag>
using _tree = tree<K, M, Cmp, T, tree_order_statistics_node_update>;
struct _hash_fn
{
static inline uint64_t splitmix64(uint64_t x)
{
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const
{
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
int main()
{
nevikw39;
int64_t n, x;
cin >> n >> x;
_hash<int64_t, int64_t, _hash_fn> ht;
vector<int64_t> a(n + 1);
for (int i = 1; i <= n; i++)
{
cin >> a[i];
ht[a[i]] = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
if (i == j)
continue;
auto k_it = ht.find(x - a[i] - a[j]);
if (k_it != ht.end()) {
const auto k = k_it->second;
if (k && k != i && k != j)
{
cout << i << ' ' << j << ' ' << k << '\n';
return 0;
}
}
}
cout << "IMPOSSIBLE\n";
return 0;
}