import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    /** ??????????????° */
    public static int TEAM_AMOUNT;
    /** ??¬???????????° */
    public static long RECORD_AMOUNT;
    /** ???????????????????????? */
    public static long CONTEST_TIME;

    /** ?????°????????????????????????????????????????????? */
    public static int RECORD_TEAM = 0;

    /** ?????°?????????????????????????????????????????? */
    public static int RECORD_TIME = 1;

    /** ?????°???????????????????????????????????? */
    public static int RECORD_SCORE = 2;

    /** ????????????????????????????????????????????? */
    public static int TEAM_SCORE = 0;

    /** ??????????????????????????????????????????????????? */
    public static int TEAM_SHOW_TIME = 1;

    /** ?????§??????????????????????????????????????? */
    public static int ON_AIR_TEAM = 0;

    /** ?????§?????????????????????????????? */
    public static int ON_AIR_SCORE = 1;

    /** ?????? */
    public static String DELIMITER = " ";

    public static void main(String[] args) throws IOException {

        // ??\???????????????
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // ???????????°?????¬???????????°??????????????????????????????????´?
        setPremise(br.readLine().split(DELIMITER));

        // ?????????????????????????????¨?????°???????´??????????????????????
        long[][] teams = new long[TEAM_AMOUNT][2];
        // ?????¨????????§?????°??¨????????????????´?????????????
        long[] maxScoreTeam = new long[2];

        // ?????¨?????????
        long now = 0;

        // ???????????°??¨
        // if ("stop".equals(strs)) {
        // break;
        // }
        for (int i = 0; i < RECORD_AMOUNT; i++) {
            long[] record = convertToLongs(br.readLine().split(DELIMITER));

            if (now < record[RECORD_TIME]) {
                // ???????????????????????????????????????????????????
                teams[(int) maxScoreTeam[ON_AIR_TEAM]][TEAM_SHOW_TIME] += record[RECORD_TIME] - now;
                // ???????????´??°??????
                now = record[RECORD_TIME];
            }

            // ?????????????????????????????°????????????
            teams[(int) record[RECORD_TEAM]][TEAM_SCORE] += record[RECORD_SCORE];
            // ?????§???????????´????????´????????°????????\????????????
            setMaxScore(teams, (int) record[RECORD_TEAM], record[RECORD_SCORE], maxScoreTeam);

        }

        // ?????¨?????????~????????????????????§?????????????????§??????????????????????????????
        teams[(int) maxScoreTeam[ON_AIR_TEAM]][TEAM_SHOW_TIME] += CONTEST_TIME - now;

        // ??????????????????
        long maxShowTime = 0;
        // ????????????????????????-1???
        int winner = 0;

        for (int i = 0; i < teams.length; i++) {
            if (teams[i][TEAM_SHOW_TIME] > maxShowTime) {
                maxShowTime = teams[i][TEAM_SHOW_TIME];
                winner = i + 1;
            }
        }

        System.out.println(winner);
    }

    /**
     * ????????? ???????????°?????¬???????????°???????????????????????????????¨?????????????
     * 
     * @param strs
     *            ???????????¶????¨??????????????????????
     */
    public static void setPremise(String[] strs) {

        TEAM_AMOUNT = Integer.parseInt(strs[0]);
        RECORD_AMOUNT = Long.parseLong(strs[1]);
        CONTEST_TIME = Long.parseLong(strs[2]);
    }

    /**
     * ????????? ?????°?????????????????????????????????????????°???????????????????????????????´???????
     * 
     * @param strs
     *            ?????????
     * @return 1??¬????????????????????±???????´?????????????
     */
    public static long[] convertToLongs(String[] strs) {
        long[] record = new long[3];
        // ?????????ID
        record[RECORD_TEAM] = Long.parseLong(strs[RECORD_TEAM]) - 1;
        // ????????????
        record[RECORD_TIME] = Long.parseLong(strs[RECORD_TIME]);
        // ???????????°
        record[RECORD_SCORE] = Long.parseLong(strs[RECORD_SCORE]);

        return record;
    }

    /**
     * ?????? ???????????????????????????????????????????????????????????°???????´???????
     * 
     * @param teams
     * @param pointGetter
     * @param point
     * @param maxScoreTeam
     */
    private static void setMaxScore(long[][] teams, int pointGetter, long point, long[] maxScoreTeam) {

        // ????????????????????????????????????????????§????????´???
        if (point > 0) {
            if (maxScoreTeam[ON_AIR_SCORE] < teams[pointGetter][TEAM_SCORE]) {
                set(teams, pointGetter, maxScoreTeam);

                return;
            } else if (maxScoreTeam[ON_AIR_SCORE] == teams[pointGetter][TEAM_SCORE]
                    && maxScoreTeam[ON_AIR_TEAM] > pointGetter) {
                // ????????????????????\??????????????§?????????????????¨????????????????????????????????????
                set(teams, pointGetter, maxScoreTeam);
                return;
            }
        } else if (maxScoreTeam[ON_AIR_TEAM] == pointGetter) {

            long max = 0;
            int team = 0;
            for (int i = 0; i < teams.length; i++) {
                if (teams[i][TEAM_SCORE] > max) {
                    max = teams[i][TEAM_SCORE];
                    team = i;
                }
            }
            // ?????????????????????
            maxScoreTeam[ON_AIR_TEAM] = team;
            // ????????????
            maxScoreTeam[ON_AIR_SCORE] = max;

            return;
        }
        return;
    }

    /**
     * ?????? ????????§????????¢????????????????¨??????????
     * 
     * @param teams
     * @param pointGetter
     * @param maxScoreTeam
     */
    private static void set(long[][] teams, int pointGetter, long[] maxScoreTeam) {
        maxScoreTeam[ON_AIR_TEAM] = pointGetter;
        maxScoreTeam[ON_AIR_SCORE] = teams[pointGetter][TEAM_SCORE];
    }
}

Measured memory_bytes: 116800