Tu problema es
$$ \ max U (z_1, ..., z_n) $$
$$ s.t. \ sum p_iz_i \ leq I $$
y
$$ s.t. \ sum z_i = X, \; \; \; z_i \ en N $$
Así que tienes una restricción lineal adicional, pero también Como se señaló en un comentario, la restricción $ z_i \ in N $ hace que esto sea un problema de optimización en el que las variables de decisión son discretas (específicamente enteros), lo que significa que, formalmente hablando, no se tienen derivados.
En la práctica, muchos problemas de optimización discreta son atacados por "simular" que podemos calcular derivadas (así que forme el Lagrangiano con las dos restricciones, obtenga las condiciones de Karush-Kuhn-Tucker, etc.), obtenga el vector maximizador de esta manera, y luego verifique qué sucede cuando redondeamos hacia arriba o hacia abajo sus elementos para que se conviertan en números enteros.
También debe verificar que la restricción de presupuesto no se haya violado en estos redondeos y permitir solo aquellas combinaciones que no lo hagan. En este caso, la restricción del presupuesto como desigualdad es importante porque el vector maximizador permisible de $ z_i $ 'probablemente no agotará completamente el presupuesto.
Ver aquí para algunos bits introductorios en Programación Integer.