import java.io.*;
import java.util.*;

public class mineral_mb {
    private static record Machine(int in, int out) {}

    public static void main(String[] args) throws IOException {
        Input in = new Input();

        int n = in.nextInt();
        int m = in.nextInt();
        int s = in.nextInt();
        int k = in.nextInt();

        @SuppressWarnings({"unchecked"})
        List<Machine>[] machines = new List[n - 1];
        for (int i = 0; i < machines.length; ++i) {
            machines[i] = new ArrayList<>();
        }

        for (int i = 0; i < m; ++i) {
            int src = in.nextInt() - 1;
            int mIn = in.nextInt();
            int mOut = in.nextInt();
            machines[src].add(new Machine(mIn, mOut));
        }

        int[] next = new int[k + 1];
        int[] prev = new int[k + 1];
        for (int i = 0; i <= k; ++i) next[i] = i;

        for (int stage = n - 2; stage >= 0; --stage) {
            prev[0] = 0;
            for (int am = 1; am <= k; ++am) {
                prev[am] = 0;
                for (Machine mach : machines[stage]) {
                    if (mach.in <= am) {
                        int update = mach.out + prev[Math.min(am - mach.in, k - mach.out)];
                        prev[am] = Math.max(prev[am], Math.min(k, update));
                    }
                }
            }
            for (int am = 1; am <= k; ++am) {
                prev[am] = next[prev[am]];
            }
            int[] tmp = next; next = prev; prev = tmp;
        }
        System.out.println(next[s]);
    }

    private static class Input {
        byte[] buf = new byte[2048];
        int curr, size;

        char next() throws IOException {
            if (curr == size) {
                curr = 0;
                size = System.in.read(buf);
            }
            char rv = (char) buf[curr];
            ++curr;
            return rv;
        }

        int nextInt() throws IOException {
            char ch;
            while ((ch = next()) <= ' ');
            int rv = ch - '0';
            while ((ch = next()) > ' ') {
                rv = 10 * rv + (ch - '0');
            }
            return rv;
        }
    }
}
