#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 5;
const int MAXT = 1e2 + 5;
int q[MAXN], t[MAXN];
set<pair<int, int> > st[MAXT];
void solve() {
  int n, T;
  scanf("%d%d", &n, &T);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &t[i], &q[i]);
  }
  int ans = 0;
  for (int cur = 1; cur <= T; cur++) {
    for (int i = 0; i <= cur; i++) {
      st[i].clear();
    }
    int top = 0;
    for (int i = 0; i < n; i++) {
      if (t[i] <= cur) {
        st[cur - t[i]].insert(make_pair(-q[i], top++));
      }
    }
    for (int i = cur; i > 0; i--) {
      while ((int)st[i].size() > 1) {
        int q1 = st[i].begin()->first;
        st[i].erase(st[i].begin());
        int q2 = st[i].begin()->first;
        st[i].erase(st[i].begin());
        st[i - 1].insert(make_pair(q1 + q2, top++));
      }
      if ((int)st[i].size() > 0) {
        int q1 = st[i].begin()->first;
        st[i].erase(st[i].begin());
        st[i - 1].insert(make_pair(q1, top++));
      }
    }
    if (!st[0].empty()) {
      ans = max(ans, -st[0].begin()->first);
    }
  }
  cout << ans;
}
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
