#include <bits/stdc++.h>
using namespace std;
bool alpha(char ch) { return (ch >= 'a' && ch <= 'z'); }
string s;
int tot;
vector<string> vals;
string set_places(string num) {
  size_t dot1 = num.find(".");
  if (dot1 == string::npos) {
    return "0." + num + ".0";
  }
  num[dot1] = '#';
  size_t dot2 = num.find(".");
  num[dot1] = '.';
  if (dot2 == string::npos) {
    if (num.length() - dot1 == 4) {
      return num + ".0";
    } else {
      return "0." + num;
    }
  }
  return num;
}
char buff[500], buff2[100];
int cmax;
long long ans;
string format(string num) {
  if (num == "1.000.000" || num == "1.000.000.00") {
    cmax++;
    ans += 1e8;
    return num;
  }
  num = set_places(num);
  int a, b, c;
  sscanf(num.c_str(), "%d.%d.%d", &a, &b, &c);
  sprintf(buff, "%03d%03d%02d", a, b, c);
  int val = 0;
  sscanf(buff, "%d", &val);
  ans += val;
  return string(buff);
}
void answer() {
  int cents = ans % 100;
  ans /= 100;
  stack<int> stk;
  while (ans > 0) {
    stk.push(ans % 1000);
    ans /= 1000;
  }
  buff[0] = 0;
  bool first = true;
  while (not stk.empty()) {
    if (!first) {
      strcat(buff, ".");
      sprintf(buff2, "%03d", stk.top());
    } else {
      sprintf(buff2, "%d", stk.top());
    }
    stk.pop();
    first = false;
    strcat(buff, buff2);
  }
  if (first) {
    strcpy(buff, "0");
  }
  if (cents > 0) {
    strcat(buff, ".");
    sprintf(buff2, "%02d", cents);
    strcat(buff, buff2);
  }
  cout << buff << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> s;
  for (int i = 0; i < s.length();) {
    while (alpha(s[i])) i++;
    string curr;
    while (i < s.length() && !alpha(s[i])) {
      curr.push_back(s[i]);
      i++;
    }
    vals.push_back(curr);
  }
  for (auto& val : vals) {
    val = format(val);
  }
  answer();
  return 0;
}
