import std.stdio;
import std.c.stdio;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.c.string;
import std.regex;
import std.typecons;

void main() {
    int N, T, S; readf("%d %d %d\n", &N, &T, &S);
    int[] A = new int[N];
    int[] B = new int[N];
    foreach (i; 0 .. N) {
        readf("%d %d\n", &A[i], &B[i]);
    }

    int[][] cache = new int[][](N, T + 1);
    foreach (i; 0 .. N) cache[i][] = -1;
    int dfs(int y, int t) {
        if (y == N) return 0;
        if (t == T) return 0;
        //[y, t].writeln;
        if (cache[y][t] >= 0) return cache[y][t];
        int ret = 0;
        // 時間をつぶす
        ret = dfs(y, t + 1);
        // 夜店yを無視
        ret = max(ret, dfs(y + 1, t));
        // 夜店yによる
        if (t + B[y] > T) goto last;
        if (t < S && S < t + B[y]) goto last;
        ret = max(ret, dfs(y + 1, t + B[y]) + A[y]);
        last: return cache[y][t] = ret;
    }

    writeln(dfs(0, 0));
}