#include <bits/stdc++.h>
using namespace std;
struct edge {
  int v;
  long long c;
};
int n, m, t;
vector<edge> f[5005];
map<pair<int, int>, int> dp;
map<pair<int, int>, int> par;
vector<int> r;
long long l[5005][5005];
void dfs2(int p, int k) {
  r.push_back(p);
  if (p == n) return;
  int g = -1;
  for (int i = 0; i < f[p].size(); i++) {
    edge e = f[p][i];
    if (l[p][k] == l[e.v][k - 1] + e.c) {
      g = i;
      break;
    }
  }
  if (g != -1) {
    edge e = f[p][g];
    dfs2(e.v, k - 1);
  }
}
long long rec(int p, int k) {
  long long &res = l[p][k];
  if (res != -1) return res;
  if (p == n) {
    if (k == 1) {
      res = 0;
      return res;
    }
    res = 1000000000;
    return res;
  }
  res = 100000000000;
  for (int i = 0; i < f[p].size(); i++) {
    edge e = f[p][i];
    long long tmp = rec(e.v, k - 1) + e.c;
    if (tmp < res) {
      res = tmp;
    }
  }
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &t);
  for (int i = 0; i < m; i++) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    edge e;
    e.v = b;
    e.c = c;
    f[a].push_back(e);
  }
  memset(l, -1, sizeof(l));
  int res = 0;
  for (int i = n; i >= 1; i--) {
    long long tmp = rec(1, i);
    if (tmp <= t) {
      res = i;
      break;
    }
  }
  printf("%d\n", res);
  dfs2(1, res);
  for (int i = 0; i < r.size(); i++) {
    if (i > 0) printf(" ");
    printf("%d", r[i]);
  }
  printf("\n");
  return 0;
}
