#include<iostream>
#include<cstring>
using namespace std;
void print(      pair<long long int,long long int> *tree,int i)
{
  int br=1;
  int cnt=1;
  for(int x=0;x<i;x++)
    {
      cout<<"<"<<(*(tree+x)).first<<","<<(*(tree+x)).second<<"> ";
      if(cnt==br)
	{
	  cout<<endl;
	  br*=2;
	  cnt=1;
	}
      else
	cnt++;


    }
}

int main()
{
  int n,r,l;
  for(;cin>>n>>r>>l;)
    {
      // id,score;
      pair<long long int,long long int> tree[n*2-1];
      for(int i=0;i<n*2-1;i++)
	tree[i]=make_pair(0,-1);
      long long int time[n+1];
      memset(time,0,sizeof(time));
      //初期化
      for(int i=1;i<=n;i++)
	{
	  int num=(i-1)+(n-1);
	  tree[num].first=i;
	  tree[num].second=0;
	  pair<long long int ,long long int>base;
	  while(true)
	    {
	      num=(num-1)/2;

	      if(num*2+2<n*2-1 &&
		 (
		  tree[num*2+1].second < tree[num*2+2].second ||
		  (tree[num*2+1].second ==  tree[num*2+2].second && tree[num*2+1].first > tree[num*2+2].first)
		  )
		 )
		base=tree[num*2+2];
	      else
		base=tree[num*2+1];
	      tree[num]=base;
	      if(num==0)break;
	    }
	}
      int oldtime=0;
      //print(tree,n*2-1);
      for(int i=0;i<r;i++)
	{
	  int d,t,x;
	  cin>>d>>t>>x;
	  time[tree[0].first]+=(t-oldtime);
	  oldtime=t;

	  //木の更新
	  d--;
	  int num=d+(n-1);
	  //	  tree[num].first=i;
	  tree[num].second+=x;
	  pair<long long int ,long long int>base;
	  while(true)
	    {
	      num=(num-1)/2;
	      if(num*2+2<n*2-1 &&
		 (
		 tree[num*2+1].second < tree[num*2+2].second ||
		 (tree[num*2+1].second ==  tree[num*2+2].second && tree[num*2+1].first > tree[num*2+2].first)

		  )
		 )
		base=tree[num*2+2];
	      else
		base=tree[num*2+1];
	      tree[num]=base;
	      if(num==0)break;
	    }

	}
      time[tree[0].first]+=(l-oldtime);
      long long int max_time=0;
      long long int max_id;
      for(int i=n;i>0;i--)
	{
	  if(max_time<=time[i])
	    {
	      max_time=time[i];
	      max_id=i;
	    }
	}
      cout<<max_id<<endl;
    }

}