#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define stop exit(0) #define nc -1 #define eps 1e-10 #define inf 1000000000 #define mod 1000000007 #define mp make_pair #define fill(array,value) memset(array,value,sizeof(array)) #define f(i,beg,end) for(int i=beg; i<=end; i++) #define F(i,beg,end) for(int i=beg; i>=end; i--) #define Max(a,b) ( (a>b)?a:b ) #define Min(a,b) ( (a> n >> k; f(i,1,n) cin >> a[i] >> b[i]; fill(dp,-1); } ll cost(ll m, ll n, ll k) { ll ret = (n*n)*(m+k); return ret; } ll calc(int from, int to) { ll &ans = dp[from][to]; if (ans != -1) { return ans; } if (to == from+1) { return (ans = cost(a[from],a[to],b[to])); } if (to == from) { return (ans = 0); } ll currAns, bestAns = 100000000000000000LL; f(i,from+1,to) { currAns = 0; ll aditionalCost = cost(a[from],a[i],b[to]); ll divisionCost = calc(from,i-1) + calc(i,to); currAns = aditionalCost + divisionCost; if (currAns < bestAns) { bestAns = currAns; } } return (ans = bestAns); } void solve() { ll needed = calc(1,n); if (needed > k) { cout << "NO" << endl; } else { cout << "YES" << endl; } cout << needed << endl; } int main() { int numberOfTests = 1; f(i,1,numberOfTests) { init(); solve(); } return 0; }