#include <bits/stdc++.h>
using namespace std;
map<int, int> c;
int maxres = 0;
vector<int> res;
void erase(int code, int count) {
  cout << code << ' ' << count << '\n';
  int c1 = c[2 * code];
  int c2 = c[2 * code + 1];
  int q = c[code] - c1 - c2;
  if (q == 0) ++count;
  if (count >= c[code]) {
    maxres = max(maxres, code);
    return;
  }
  res.push_back(code);
  int tc1 = 0;
  int tc2 = 0;
  while (count > 0) {
    if (c1 > c2) {
      --c1;
      ++tc1;
    } else {
      --c2;
      ++tc2;
    }
    --count;
  }
  erase(2 * code, tc1);
  erase(2 * code + 1, tc2);
}
int a[50005];
bool ass(int x, int y) {
  while (x > y) x /= 2;
  return (x == y);
}
void o(int q) {
  if (q < 100) printf("0");
  if (q < 10) printf("0");
  printf("%d", q);
}
int main() {
  string s;
  cin >> s;
  int r = 0;
  int pr;
  int cr;
  int cop = 0;
  int rub = 0;
  int lastLen = 0;
  for (int i = 0; i < s.length();) {
    while (i < s.length() && s[i] >= 'a' && s[i] <= 'z') ++i;
    cr = 0;
    pr = 0;
    bool p = 0;
    lastLen = 0;
    while (i < s.length() && (s[i] > 'z' || s[i] < 'a')) {
      if (s[i] == '.') {
        cr = 1000 * cr + pr;
        pr = 0;
        lastLen = 0;
        p = 1;
      } else {
        ++lastLen;
        pr = pr * 10 + s[i] - '0';
      }
      ++i;
    }
    if (lastLen == 2 && p)
      cop += pr;
    else
      cr = 1000 * cr + pr;
    rub += cr;
    ++i;
  }
  vector<int> tr;
  rub += cop / 100;
  cop %= 100;
  while (rub > 0) {
    tr.push_back(rub % 1000);
    rub /= 1000;
  }
  if (tr.size() > 0)
    cout << tr[tr.size() - 1];
  else
    cout << 0;
  for (int i = tr.size() - 2; i >= 0; --i) {
    cout << '.';
    o(tr[i]);
  }
  if (cop > 0) {
    cout << '.';
    if (cop < 10) cout << 0;
    cout << cop << '\n';
  }
}
