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 void main(String[] args) throws IOException {
 
        // ??\???????????????
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // ????????????°??????¬????????????°???????????????????????????????????´?
        setPremise(br.readLine().split(" "));
 
        // ??????????????????????????????¨??????°????????´???????????????????????????????N??? 0:??????° 1:????????????
        long[][] teams = new long[TEAM_AMOUNT][2];
        // ??????¨?????????§??????°???¨?????????????????´????????????? 0:????????? 1:??????°
        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(" "));
 
            if (now < record[1]) {
                // ???????????????????????????????????????????????????
                teams[(int) maxScoreTeam[0]][1] += record[1] - now;
                // ????????????´???°??????
                now = record[1];
            }
 
            // ??????????????????????????????°????????????
            teams[(int) record[0]][0] += record[2];
            // ??????§????????????´?????????´?????????°????????\????????????
            setMaxScore(teams, (int) record[0], record[2], maxScoreTeam);
 
        }
 
        // ??????¨?????????~?????????????????????§??????????????????§??????????????????????????????
        teams[(int) maxScoreTeam[0]][1] += CONTEST_TIME - now;
 
        // ??????????????????
        long maxShowTime = 0;
        // ????????????????????????-1???
        int winner = -1;
 
        for (int i = 0; i < teams.length; i++) {
            if (teams[i][1] > maxShowTime) {
                maxShowTime = teams[i][1];
                winner = i + 1;
            }
        }
 
        System.out.println(winner);
    }
 
    public static void setPremise(String[] strs) {
 
        TEAM_AMOUNT = Integer.parseInt(strs[0]);
        RECORD_AMOUNT = Long.parseLong(strs[1]);
        CONTEST_TIME = Long.parseLong(strs[2]);
    }
 
    public static long[] convertToLongs(String[] strs) {
        long[] record = new long[3];
        // ?????????ID
        record[0] = Long.parseLong(strs[0]) - 1;
        // ????????????
        record[1] = Long.parseLong(strs[1]);
        // ????????????°
        record[2] = Long.parseLong(strs[2]);
 
        return record;
    }
 
    /**
     * ?????? ????????????????????????????????????????????????????????????°????????´???????
     * 
     * @param teams
     * @param pointGetter
     * @param point
     * @param maxScoreTeam
     */
    private static void setMaxScore(long[][] teams, int pointGetter, long point, long[] maxScoreTeam) {
 
        // ????????????´???
 
        // ?????????????????????????????????????????????§?????????´???
        if (maxScoreTeam[1] < teams[pointGetter][0]) {
            setMaxScoreTeam(teams, pointGetter, maxScoreTeam);
 
            return;
        } else if (maxScoreTeam[1] == teams[pointGetter][0] && maxScoreTeam[0] > pointGetter) {
            // ????????????????????\???????????????§??????????????????¨????????????????????????????????????
            setMaxScoreTeam(teams, pointGetter, maxScoreTeam);
            return;
        } else if (maxScoreTeam[0] == pointGetter && point < 0) {
 
            long max = 0;
            int team = 0;
            for (int i = 0; i < teams.length; i++) {
                if (teams[i][0] > max) {
                    max = teams[i][0];
                    team = i;
                }
            }
            // ?????????????????????
            maxScoreTeam[0] = team;
            // ????????????
            maxScoreTeam[1] = max;
 
            return;
        }
        return;
    }
 
    /**
     * ?????? ?????????§?????????¢?????????????????¨??????????
     * 
     * @param teams
     * @param pointGetter
     * @param maxScoreTeam
     */
    private static void setMaxScoreTeam(long[][] teams, int pointGetter, long[] maxScoreTeam) {
        maxScoreTeam[0] = pointGetter;
        maxScoreTeam[1] = teams[pointGetter][0];
    }
}

Measured memory_bytes: 118076