Problem p03078 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cstdlib>
#include <ctype.h>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <string.h>
#include <string>
#include <time.h>
#include <tuple>
#include <vector>
using namespace std;
#define int long long
#define rep(i, s, n) for (int i = s; i < n; i++)
#define repe(i, s, n) for (int i = s; i <= n; i++)
#define rrep(i, s, n) for (int i = (n)-1; i >= (s); i--)
#define all(v) (v).begin(), (v).end()
#define pb push_back
#define fi first
#define se second
#define chmin(a, b) a = min((a), (b))
#define chmax(a, b) a = max((a), (b))
#define l1 list[index]
#define l2 list[index - 1]
#define l3 list[index + 1]
#define iif(i, j) ((i < 0 && j < 0) || (i > 0 && j > 0)) ? true : false
typedef long long ll;
typedef pair<int, int> pint;
typedef vector<int> vint;
typedef vector<pint> vpint;
typedef pair<pint, int> P1;
typedef pair<int, pint> P2;
typedef pair<pint, pint> PP;
static const ll maxLL = (ll)1 << 62;
const ll MOD = 1000000007;
const ll INF = 1e18;
int ca[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

signed main() {
  ll x, y, z, n, k, cnt = 0, pp, h, l;
  string s, s1, s2;
  vector<ll> listx, listy, listz;
  vector<ll> list1, list2;
  int sum = 0, maxn = -9999, minn = 199999999999999;

  cin >> x >> y >> z >> k;

  for (ll i = 0; i < x; i++) {
    ll num;
    cin >> num;
    listx.push_back(num);
  }

  for (int i = 0; i < y; i++) {
    int num;
    cin >> num;
    listy.push_back(num);
  }

  for (int i = 0; i < z; i++) {
    int num;
    cin >> num;
    listz.push_back(num);
  }

  /*sort(listx.begin(), listx.end(), greater<int>());
  sort(listy.begin(), listy.end(), greater<int>());
  sort(listz.begin(), listz.end(), greater<int>());*/

  for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
      list1.push_back(listx[i] + listy[j]);
    }
  }

  sort(list1.begin(), list1.end(), greater<int>());

  for (int i = 0; i < list1.size(); i++) {
    for (int j = 0; j < z; j++) {
      list2.push_back(list1[i] + listz[j]);
    }
  }

  sort(list2.begin(), list2.end(), greater<int>());

  for (int i = 0; i < k; i++) {
    cout << list2[i] << endl;
  }

  getchar();
  getchar();
  return 0;
}

Fixed submission:
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cstdlib>
#include <ctype.h>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <string.h>
#include <string>
#include <time.h>
#include <tuple>
#include <vector>
using namespace std;
#define int long long
#define rep(i, s, n) for (int i = s; i < n; i++)
#define repe(i, s, n) for (int i = s; i <= n; i++)
#define rrep(i, s, n) for (int i = (n)-1; i >= (s); i--)
#define all(v) (v).begin(), (v).end()
#define pb push_back
#define fi first
#define se second
#define chmin(a, b) a = min((a), (b))
#define chmax(a, b) a = max((a), (b))
#define l1 list[index]
#define l2 list[index - 1]
#define l3 list[index + 1]
#define iif(i, j) ((i < 0 && j < 0) || (i > 0 && j > 0)) ? true : false
typedef long long ll;
typedef pair<int, int> pint;
typedef vector<int> vint;
typedef vector<pint> vpint;
typedef pair<pint, int> P1;
typedef pair<int, pint> P2;
typedef pair<pint, pint> PP;
static const ll maxLL = (ll)1 << 62;
const ll MOD = 1000000007;
const ll INF = 1e18;
int ca[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

signed main() {
  ll x, y, z, n, k, cnt = 0, pp, h, l;
  string s, s1, s2;
  vector<ll> listx, listy, listz;
  vector<ll> list1, list2;
  int sum = 0, maxn = -9999, minn = 199999999999999;

  cin >> x >> y >> z >> k;

  for (ll i = 0; i < x; i++) {
    ll num;
    cin >> num;
    listx.push_back(num);
  }

  for (int i = 0; i < y; i++) {
    int num;
    cin >> num;
    listy.push_back(num);
  }

  for (int i = 0; i < z; i++) {
    int num;
    cin >> num;
    listz.push_back(num);
  }

  /*sort(listx.begin(), listx.end(), greater<int>());
  sort(listy.begin(), listy.end(), greater<int>());
  sort(listz.begin(), listz.end(), greater<int>());*/

  for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
      list1.push_back(listx[i] + listy[j]);
    }
  }

  sort(list1.begin(), list1.end(), greater<int>());

  for (int i = 0; i < list1.size() && i < k; i++) {
    for (int j = 0; j < z; j++) {
      list2.push_back(list1[i] + listz[j]);
    }
  }

  sort(list2.begin(), list2.end(), greater<int>());

  for (int i = 0; i < k; i++) {
    cout << list2[i] << endl;
  }

  getchar();
  getchar();
  return 0;
}