#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
void findSubset(vector<int>& arr, vector<vector<int>>& count, int M) {
vector<int> result;
int n = arr.size();
int j = M;
for (int i = n; i > 0 && j > 0; ) {
if (count[i][j] != count[i-1][j]) {
result.push_back(arr[i-1]);
j -= arr[i-1];
i--;
} else {
i--;
}
}
cout << M << "=";
for (int k = 0; k < result.size(); ++k) {
if (k != 0) {
cout << "+";
}
cout << result[k];
}
cout << endl;
}
bool subsetSum(vector<int>& arr, int M) {
int n = arr.size();
vector<vector<int>> count(n + 1, vector<int>(M + 1, INT_MAX));
vector<vector<bool>> dp(n + 1, vector<bool>(M + 1, false));
for (int i = 0; i <= n; ++i) {
dp[i][0] = true;
count[i][0] = 0;
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= M; ++j) {
dp[i][j] = dp[i - 1][j];
count[i][j] = count[i - 1][j];
if (arr[i - 1] <= j) {
if (dp[i - 1][j - arr[i - 1]] && count[i - 1][j - arr[i - 1]] + 1 < count[i][j]) {
dp[i][j] = true;
count[i][j] = count[i - 1][j - arr[i - 1]] + 1;
}
}
}
}
if (dp[n][M]) {
findSubset(arr, count, M);
} else {
cout << "No\n";
}
return dp[n][M];
}
int main() {
int N, M;
cin >> N;
vector<int> arr(N);
for (int i = 0; i < N; ++i) {
cin >> arr[i];
}
cin >> M;
subsetSum(arr, M);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y2xpbWl0cz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGZpbmRTdWJzZXQodmVjdG9yPGludD4mIGFyciwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgY291bnQsIGludCBNKSB7CiAgICB2ZWN0b3I8aW50PiByZXN1bHQ7CiAgICBpbnQgbiA9IGFyci5zaXplKCk7CiAgICBpbnQgaiA9IE07CgogICAgZm9yIChpbnQgaSA9IG47IGkgPiAwICYmIGogPiAwOyApIHsKICAgICAgICBpZiAoY291bnRbaV1bal0gIT0gY291bnRbaS0xXVtqXSkgewogICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKGFycltpLTFdKTsKICAgICAgICAgICAgaiAtPSBhcnJbaS0xXTsKICAgICAgICAgICAgaS0tOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGktLTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBNIDw8ICI9IjsKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcmVzdWx0LnNpemUoKTsgKytrKSB7CiAgICAgICAgaWYgKGsgIT0gMCkgewogICAgICAgICAgICBjb3V0IDw8ICIrIjsKICAgICAgICB9CiAgICAgICAgY291dCA8PCByZXN1bHRba107CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCmJvb2wgc3Vic2V0U3VtKHZlY3RvcjxpbnQ+JiBhcnIsIGludCBNKSB7CiAgICBpbnQgbiA9IGFyci5zaXplKCk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGNvdW50KG4gKyAxLCB2ZWN0b3I8aW50PihNICsgMSwgSU5UX01BWCkpOwogICAgdmVjdG9yPHZlY3Rvcjxib29sPj4gZHAobiArIDEsIHZlY3Rvcjxib29sPihNICsgMSwgZmFsc2UpKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgZHBbaV1bMF0gPSB0cnVlOwogICAgICAgIGNvdW50W2ldWzBdID0gMDsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBNOyArK2opIHsKICAgICAgICAgICAgZHBbaV1bal0gPSBkcFtpIC0gMV1bal07CiAgICAgICAgICAgIGNvdW50W2ldW2pdID0gY291bnRbaSAtIDFdW2pdOwogICAgICAgICAgICBpZiAoYXJyW2kgLSAxXSA8PSBqKSB7CiAgICAgICAgICAgICAgICBpZiAoZHBbaSAtIDFdW2ogLSBhcnJbaSAtIDFdXSAmJiBjb3VudFtpIC0gMV1baiAtIGFycltpIC0gMV1dICsgMSA8IGNvdW50W2ldW2pdKSB7CiAgICAgICAgICAgICAgICAgICAgZHBbaV1bal0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvdW50W2ldW2pdID0gY291bnRbaSAtIDFdW2ogLSBhcnJbaSAtIDFdXSArIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKGRwW25dW01dKSB7CiAgICAgICAgZmluZFN1YnNldChhcnIsIGNvdW50LCBNKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY291dCA8PCAiTm9cbiI7CiAgICB9CgogICAgcmV0dXJuIGRwW25dW01dOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBOLCBNOwogICAgCiAgICBjaW4gPj4gTjsKICAgIHZlY3RvcjxpbnQ+IGFycihOKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgfQogICAgCiAgICBjaW4gPj4gTTsKICAgIAogICAgc3Vic2V0U3VtKGFyciwgTSk7CgogICAgcmV0dXJuIDA7Cn0K