#!/usr/bin/env python3
import sys

data = list(map(int, sys.stdin.buffer.read().split()))
it = iter(data)
n, t, k = next(it), next(it), next(it)

meets = []
vs = []
for _ in range(n):
  s = next(it)
  e = next(it)
  meets.append((e, s))
  vs.append(s)
  vs.append(e)

vs.append(0)
vs = sorted(set(vs))
idx = {v: i for i, v in enumerate(vs)}
vsz = len(vs)

meets.sort()

INF = 10**18

dp_rows = [None] * vsz
dp_rows[0] = {0: 0}
pe = 0

for e, s in meets:
  e_idx = idx[e]
  if e_idx > pe:
    for ce in range(pe + 1, e_idx + 1):
      dp_rows[ce] = dp_rows[ce - 1]
    pe = e_idx

  s_idx = idx[s]
  src = dp_rows[s_idx]

  dest = dp_rows[e_idx]
  need_copy = False
  if dest is None:
    dest = {}
    dp_rows[e_idx] = dest
  if e_idx > 0 and dest is dp_rows[e_idx - 1]:
    need_copy = True
  if dest is src:
    need_copy = True
  if need_copy:
    dest = dict(dest)
    dp_rows[e_idx] = dest

  length = e - s
  for j, val in list(src.items()):
    newval = val + length
    cur = dest.get(j + 1)
    if cur is None or newval < cur:
      dest[j + 1] = newval

dp_end = dp_rows[vsz - 1]
for i in range(n, -1, -1):
  val = dp_end.get(i, INF)
  if t - val >= k:
    print(i)
    break
