#include<bits/stdc++.h>
using namespace std;
template <typename T> inline void read(T &x)
{
x=0;short f=1;char c=getchar();
for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
x*=f;return;
}
#define ll long long
const int N=3e5+5;
int n,m,K;
int a[N],b[N],c[N];
int f[N],dp[20][N],g[2][N];
int find(int l,int r,int u)
{
r=min(r,u);
while(l<r)
{
int mid=(l+r+1)>>1;
for(int i=1;i<=m;++i) g[1][i]=g[0][i];
for(int i=l;i<mid;++i)
for(int j=m;j>=a[i];--j)
g[1][j]=max(g[1][j-a[i]]+c[i],g[1][j]);
for(int i=mid;i<=r;++i)
for(int j=m;j>=b[i];--j)
g[1][j]=max(g[1][j-b[i]]+c[i],g[1][j]);
ll sum=0;
for(int i=1;i<=m;++i) sum+=g[1][i];
if(sum<=1ll*K*m)
{
for(int i=l;i<mid;++i)
for(int j=m;j>=a[i];--j)
g[0][j]=max(g[0][j-a[i]]+c[i],g[0][j]);
l=mid;
}
else
{
for(int i=mid;i<=r;++i)
for(int j=m;j>=b[i];--j)
g[0][j]=max(g[0][j-b[i]]+c[i],g[0][j]);
r=mid-1;
}
}
for(int j=m;j>=b[l];--j)
g[0][j]=max(g[0][j-b[l]]+c[l],g[0][j]);
ll sum=0;
for(int i=1;i<=m;++i) sum+=g[0][i];
return l-(sum>1ll*K*m);
}
void solve(int d,int l,int r,int L,int R)
{
if(L==R)
{
for(int i=l;i<=r;++i) f[i]=L;
return;
}
int Mid=(L+R)>>1;
for(int i=1;i<=m;++i) dp[d+1][i]=dp[d][i];
for(int i=Mid+1;i<=R;++i)
for(int j=m;j>=a[i];--j)
dp[d+1][j]=max(dp[d+1][j-a[i]]+c[i],dp[d+1][j]);
for(int i=max(r+1,L);i<=Mid;++i)
for(int j=m;j>=b[i];--j)
dp[d+1][j]=max(dp[d+1][j-b[i]]+c[i],dp[d+1][j]);
for(int i=1;i<=m;++i) g[0][i]=dp[d+1][i];
int mid=find(l,r,Mid);
if(l<=mid)
{
for(int i=1;i<=m;++i) dp[d+1][i]=dp[d][i];
for(int i=Mid+1;i<=R;++i)
for(int j=m;j>=a[i];--j)
dp[d+1][j]=max(dp[d+1][j-a[i]]+c[i],dp[d+1][j]);
for(int i=min(r,L-1);i>mid;i--)
for(int j=m;j>=b[i];--j)
dp[d+1][j]=max(dp[d+1][j-b[i]]+c[i],dp[d+1][j]);
solve(d+1,l,mid,L,Mid);
}
if(mid<r)
{
for(int i=1;i<=m;++i) dp[d+1][i]=dp[d][i];
for(int i=l;i<=mid;++i)
for(int j=m;j>=a[i];--j)
dp[d+1][j]=max(dp[d+1][j-a[i]]+c[i],dp[d+1][j]);
for(int i=max(r+1,L);i<=Mid;++i)
for(int j=m;j>=b[i];--j)
dp[d+1][j]=max(dp[d+1][j-b[i]]+c[i],dp[d+1][j]);
solve(d+1,mid+1,r,Mid+1,R);
}
}
int main()
{
read(n),read(m),read(K);
for(int i=1;i<=n;++i)
read(a[i]),read(b[i]),read(c[i]);
solve(0,1,n,1,n+1);
ll ans=0;
for(int i=1;i<=n;++i) ans+=n-f[i]+1;
printf("%lld\n",ans);
return 0;
}