Grandma Laura came to the market to sell some apples. During the day she sold all the apples she had. But grandma is old, so she forgot how many apples she had brought to the market.

She precisely remembers she had n buyers and each of them bought exactly half of the apples she had at the moment of the purchase and also she gave a half of an apple to some of them as a gift (if the number of apples at the moment of purchase was odd), until she sold all the apples she had.

So each buyer took some integral positive number of apples, but maybe he didn't pay for a half of an apple (if the number of apples at the moment of the purchase was odd).

For each buyer grandma remembers if she gave a half of an apple as a gift or not. The cost of an apple is p (the number p is even).

Print the total money grandma should have at the end of the day to check if some buyers cheated her.

Input

The first line contains two integers n and p (1 ≤ n ≤ 40, 2 ≤ p ≤ 1000) — the number of the buyers and the cost of one apple. It is guaranteed that the number p is even.

The next n lines contains the description of buyers. Each buyer is described with the string half if he simply bought half of the apples and with the string halfplus if grandma also gave him a half of an apple as a gift.

It is guaranteed that grandma has at least one apple at the start of the day and she has no apples at the end of the day.

Output

Print the only integer a — the total money grandma should have at the end of the day.

Note that the answer can be too large, so you should use 64-bit integer type to store it. In C++ you can use the long long integer type and in Java you can use long integer type.

Examples

Input

2 10
half
halfplus


Output

15


Input

3 10
halfplus
halfplus
halfplus


Output

55

Note

In the first sample at the start of the day the grandma had two apples. First she sold one apple and then she sold a half of the second apple and gave a half of the second apple as a present to the second buyer.
#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline int checkbit(T n, T i) {
  return ((n >> i) & T(1));
}
inline int bits_count(int v) {
  v = v - ((v >> 1) & 0x55555555);
  v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
  return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
}
inline int bits_count(long long v) {
  int t = v >> 32;
  int p = (v & ((1LL << 32) - 1));
  return bits_count(t) + bits_count(p);
}
unsigned int reverse_bits(register unsigned int x) {
  x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
  x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
  x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
  x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
  return ((x >> 16) | (x << 16));
}
template <typename T>
inline bool isPowerOfTwo(T n) {
  return (n != 0 and ((n & (n - 1)) == 0));
}
inline int binlog(int n) {
  assert(n > 0);
  return 32 - __builtin_clz(n) - 1;
}
inline int binlog(long long n) {
  assert(n > 0);
  return 64 - __builtin_clzll(n) - 1;
}
void bitprint(int n, int w = 32) {
  for (int i = w - 1; i >= 0; i--) {
    cout << checkbit(n, i);
  }
  cout << "\n";
}
void bitprint(long long n, int w = 64) {
  for (long long i = w - 1; i >= 0; i--) {
    cout << checkbit(n, i);
  }
  cout << "\n";
}
template <typename T>
inline T sqr(T x) {
  T x_ = (x);
  return x_ * x_;
}
template <typename T>
inline T qbr(T x) {
  T x_ = (x);
  return ((x_ * x_) * x_);
}
template <typename T>
inline int sign(T x) {
  T x_ = (x);
  return ((x_ > T(0)) - (x_ < T(0)));
}
template <typename T>
inline T mod(T x, T m) {
  T x_ = (x);
  return (((x_) >= 0) ? ((x_) % (m)) : ((((x_) % (m)) + (m)) % (m)));
}
template <typename T>
inline T gcd(T a, T b) {
  while (b) {
    T t = a % b;
    a = b;
    b = t;
  }
  return a;
}
template <typename T>
inline T gcd_ex(T a, T b, T& x, T& y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  }
  T x1, y1;
  T d = gcd_ex(b, a % b, x1, y1);
  x = y1;
  y = x1 - (a / b) * y1;
  return d;
}
template <typename T>
inline T lcm(T a, T b) {
  return (a * (b / gcd(a, b)));
}
template <typename A, typename B, typename C>
function<C(A)> combine(function<B(A)> f, function<C(B)> g) {
  return bind(g, bind(f, placeholders::_1));
}
template <typename Collection, typename UnaryOperation>
void foreach (Collection& col, UnaryOperation op) {
  for_each(begin(col), end(col), op);
}
template <typename Collection, typename UnaryOperation>
Collection fmap(Collection& col, UnaryOperation op) {
  transform(begin(col), end(col), col.begin(), op);
  return col;
}
template <typename Collection, typename binop>
Collection zip(Collection& fc, Collection& sc, binop op) {
  transform(begin(fc), end(fc), sc.begin(), fc.begin(), op);
  return fc;
}
template <typename Collection, typename Condition>
bool exists(Collection& col, Condition con) {
  auto exist = find_if(begin(col), end(col), con);
  return exist != col.end();
}
template <typename Collection, typename Predicate>
Collection filterNot(Collection& col, Predicate predicate) {
  auto returnIterator = remove_if(begin(col), end(col), predicate);
  col.erase(returnIterator, end(col));
  return col;
}
void fastIO() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
}
template <class T1, class T2>
istream& operator>>(istream& in, pair<T1, T2>& P) {
  in >> P.first >> P.second;
  return in;
}
template <class T>
istream& operator>>(istream& in, vector<T>& Col) {
  for (auto& el : Col) in >> el;
  return in;
}
template <class T>
inline void getarr(T* arr, int l, int r) {
  for (long long i = l; i < r; i++) cin >> arr[i];
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const pair<T1, T2>& p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<vector<T>>& v) {
  for (auto& row : v) {
    for (auto& el : row) os << el << " ";
    os << "\n";
  }
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& Col) {
  for (auto& el : Col) os << el << " ";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const set<T>& Col) {
  for (auto& el : Col) os << el << " ";
  return os;
}
template <class T1, class T2>
ostream& operator<<(ostream& os, const map<T1, T2>& Col) {
  for (auto& el : Col) os << el << " ";
  return os;
}
template <class T>
inline void printarr(T* arr, int l, int r) {
  for (long long i = l; i < r; i++) {
    cout << arr[i] << " ";
  };
  cout << "\n";
}
template <typename First>
void read(First& t) {
  cin >> t;
}
template <typename First, typename... Args>
void read(First& f, Args&... args) {
  cin >> f;
  read(forward<Args&>(args)...);
}
template <typename T>
void print(T&& t) {
  cout << t << "\n";
}
template <typename First, typename... Args>
void print(First&& f, Args&&... args) {
  cout << f << " ";
  print(forward<Args&&>(args)...);
}
template <typename T>
void printLn(T&& t) {
  cout << t << "\n";
}
template <typename First, typename... Args>
void printLn(First&& f, Args&&... args) {
  cout << f << "\n";
  printLn(forward<Args&&>(args)...);
}
template <typename T, size_t N>
struct MakeTensor {
  template <typename... Args>
  static auto tensor(size_t first, Args... sizes)
      -> vector<decltype(MakeTensor<T, N - 1>::tensor(sizes...))> {
    auto inner = MakeTensor<T, N - 1>::tensor(sizes...);
    return vector<decltype(inner)>(first, inner);
  }
};
template <typename T>
struct MakeTensor<T, 1> {
  static vector<T> tensor(size_t size) { return vector<T>(size); }
};
template <typename T, typename... Args>
auto tensor(Args... args)
    -> decltype(MakeTensor<T, sizeof...(Args)>::tensor(args...)) {
  return MakeTensor<T, sizeof...(Args)>::tensor(args...);
}
template <typename T1, typename T2, typename T3>
struct triple {
  T1 a;
  T2 b;
  T3 c;
  triple(){};
  triple(T1 _a, T2 _b, T3 _c) : a(_a), b(_b), c(_c) {}
};
template <typename T1, typename T2, typename T3>
bool operator<(const triple<T1, T2, T3>& t1, const triple<T1, T2, T3>& t2) {
  if (t1.a != t2.a)
    return t1.a < t2.a;
  else if (t1.b != t2.b)
    return t1.b < t2.b;
  else
    return t1.c < t2.c;
}
template <typename T1, typename T2, typename T3>
inline std::ostream& operator<<(std::ostream& os, const triple<T1, T2, T3>& t) {
  return os << "(" << t.a << ", " << t.b << ", " << t.c << ")";
}
int main() {
  long long n, p;
  cin >> n >> p;
  vector<int> a(n);
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (s == "half") {
      a[i] = 0;
    } else {
      a[i] = 1;
    }
  }
  long long init = 1;
  for (int i = n - 2; i >= 0; i--) {
    init = init * 2 + a[i];
  }
  long long answ = 0;
  while (init) {
    answ += p * (init / 2.);
    init /= 2;
  }
  print(answ);
  return 0;
}
